Regex-Spickzettel
Reguläre Ausdrücke sind kompakt genug, dass die Syntax leichter nachzuschlagen als auswendig zu lernen ist. Diese Seite ist das Ganze auf einem Bildschirm — Klassen, Quantoren, Anker, Gruppen, Lookaround, Escapen und die Flags — mit einem funktionierenden Beispiel für jede Zeile.
Der Dialekt ist JavaScript, das ist, was in deinem Browser läuft und was der Regex-Tester auf dieser Website verwendet. Das meiste davon ist identisch in Python, Java, Go und PCRE; wo Dialekte voneinander abweichen, weichen sie an den Rändern ab — Lookbehind-Unterstützung, Syntax für benannte Gruppen und ob \d "ASCII-Ziffer" oder "beliebige Unicode-Ziffer" bedeutet.
Zwei Dinge sind für die meisten Überraschungen verantwortlich. Quantoren sind gierig: Sie nehmen alles, was sie können, und geben nur zurück, wenn der Rest des Musters fehlschlägt, weshalb <.+> zwei Tags verschlingt und <.+?> nicht. Und die Alternation bindet am schwächsten von allen, sodass ^a|b$ "beginnt mit a oder endet mit b" bedeutet — nicht das, was die meisten Leute beabsichtigen, wenn sie es schreiben.
Zeichenklassen
11Die Kurzformen sind ASCII-only, es sei denn, du fügst das u-Flag hinzu und verwendest Unicode-Eigenschafts-Escapes.
| Syntax | Bedeutung | Beispiel |
|---|---|---|
| . | Beliebiges Zeichen außer einem ZeilenumbruchFüge das s-Flag hinzu, damit es auch Zeilenumbrüche matcht. | /a.c/"abc" → "abc" |
| \d | Eine Ziffer, 0–9 | /\d+/"order 42" → "42" |
| \D | Alles, was keine Ziffer ist | /\D+/"42abc" → "abc" |
| \w | Buchstabe, Ziffer oder UnterstrichNur ASCII — "é" ist kein \w. | /\w+/"user_1!" → "user_1" |
| \W | Alles, was \w nicht matcht | /\W+/"a++b" → "++" |
| \s | Beliebiger Leerraum, einschließlich Tabs und Zeilenumbrüchen | /\s+/"a \t b" → " \t " |
| \S | Beliebiges Nicht-Leerraum-Zeichen | /\S+/" hi" → "hi" |
| [abc] | Beliebiges der aufgeführten Zeichen | /[aeiou]/"rhythm and" → "a" |
| [^abc] | Beliebiges Zeichen außer den aufgeführten | /[^aeiou ]+/"aeiou xyz" → "xyz" |
| [a-z] | Ein Zeichenbereich | /[a-f]+/"zzabcz" → "abc" |
| \p{L} | Beliebiger Unicode-Buchstabe (benötigt das u-Flag) | /\p{L}+/"42 café" → "café" |
Quantoren
7Alle diese sind standardmäßig gierig: Sie nehmen so viel sie können und geben nur zurück, wenn der Rest des Musters fehlschlägt.
| Syntax | Bedeutung | Beispiel |
|---|---|---|
| * | Null oder mehr | /ab*/"a" → "a" |
| + | Eins oder mehr | /ab+/"abbb" → "abbb" |
| ? | Null oder eins — macht es optional | /colou?r/"color" → "color" |
| {3} | Genau drei | /\d{3}/"id 12345" → "123" |
| {2,} | Zwei oder mehr | /a{2,}/"aaa" → "aaa" |
| {2,4} | Zwischen zwei und vier | /a{2,4}/"aaaaa" → "aaaa" |
| *? | Genügsam — nimmt so wenig wie möglichDas gierige <.+> würde beide Tags verschlingen. | /<.+?>/"<a><b>" → "<a>" |
Anker und Grenzen
4Diese matchen eine Position, kein Zeichen, verbrauchen also nichts.
| Syntax | Bedeutung | Beispiel |
|---|---|---|
| ^ | Anfang der Zeichenkette oder einer Zeile mit dem m-Flag | /^a/"abc" → "a" |
| $ | Ende der Zeichenkette oder einer Zeile mit dem m-Flag | /c$/"abc" → "c" |
| \b | Eine WortgrenzeDas ist, was verhindert, dass "cat" innerhalb von "concatenate" matcht. | /\bcat\b/"the cat sat" → "cat" |
| \B | Keine Wortgrenze | /\Bcat/"concatenate" → "cat" |
Gruppen und Alternation
5| Syntax | Bedeutung | Beispiel |
|---|---|---|
| (abc) | Erfassende Gruppe — für die Ersetzung gemerkt | /(\d+)-(\d+)/"10-20" → "10-20" |
| (?:abc) | Gruppierung ohne ErfassungVerwende dies, wenn du nur die Gruppierung brauchst; es hält die Erfassungsnummern sinnvoll. | /(?:ab)+/"abab" → "abab" |
| (?<name>…) | Benannte erfassende Gruppe | /(?<year>\d{4})/"in 2026" → "2026" |
| a|b | Entweder-oder — AlternationDie Alternation hat die niedrigste Priorität: ^a|b$ ist "^a" oder "b$", nicht "^(a|b)$". | /cat|dog/"one dog" → "dog" |
| \1 | Rückverweis auf die erste Gruppe | /(\w)\1/"letter" → "tt" |
Lookaround
4Zusicherungen darüber, was eine Position umgibt. Sie matchen selbst nichts, was sie sicher kombinierbar macht.
| Syntax | Bedeutung | Beispiel |
|---|---|---|
| (?=…) | Lookahead — gefolgt von diesem | /\d+(?= kg)/"80 kg" → "80" |
| (?!…) | Negativer Lookahead — nicht gefolgt von diesem | /\d+(?! kg)/"80 lb" → "80" |
| (?<=…) | Lookbehind — mit diesem davor | /(?<=\$)\d+/"costs $40" → "40" |
| (?<!…) | Negativer Lookbehind — nicht mit diesem davor | /(?<!\$)\b\d+/"about 40" → "40" |
Escapen
5Diese zwölf Zeichen sind jene, die einen Backslash brauchen, um wörtlich genommen zu werden.
| Syntax | Bedeutung | Beispiel |
|---|---|---|
| \. | Ein wörtlicher Punkt | /\d\.\d/"v2.5" → "2.5" |
| \\ | Ein wörtlicher Backslash | /\\/"C:\\dir" → "\\" |
| \n | Ein Zeilenvorschub | /a\nb/"a\nb" → "a\nb" |
| \t | Ein Tabulator | /a\tb/"a\tb" → "a\tb" |
| \uFFFF | Ein Zeichen anhand seines Codepunkts | /\u00e9/"café" → "é" |
Flags
6| Flag | Name | Bedeutung |
|---|---|---|
| g | Global | Findet jeden Treffer, nicht nur den ersten. |
| i | Groß-/Kleinschreibung ignorieren | Matcht unabhängig von Groß- oder Kleinschreibung. |
| m | Multiline | Lässt ^ und $ an jedem Zeilenumbruch matchen statt nur an den Enden der Zeichenkette. |
| s | DotAll | Lässt . auch Zeilenumbrüche matchen. |
| u | Unicode | Behandelt das Muster als Codepunkte und aktiviert \p{…}-Eigenschafts-Escapes. |
| y | Sticky | Matcht nur genau bei lastIndex, sucht nie vorwärts. |