Regex-Tester
Geben Sie ein Muster ein, aktivieren Sie die benötigten Flags und fügen Sie einen Text ein: Jeder Treffer wird schon beim Tippen markiert und mit Position und Erfassungsgruppen aufgelistet. Das Muster läuft auf der JavaScript-Regex-Engine Ihres eigenen Browsers. Die Ergebnisse entsprechen daher denen in Ihrem Code, und der Text bleibt auf Ihrem Gerät.
0 Zeichen · 0 Wörter · 0 Zeilen
Treffer werden hier hervorgehoben.0 Zeichen · 0 Wörter · 0 Zeilen
Läuft komplett in diesem Browser-Tab. Ihr Text wird weder hochgeladen noch gespeichert.
JavaScript-Regex-Token
Die Spalte „Erster Treffer“ entstand, indem jedes Muster mit der JavaScript-Engine, die diese Seite erstellt hat, auf seinen Text angewendet wurde.
| Token | Bedeutung | Muster | Text | Erster Treffer |
|---|---|---|---|---|
\d | Ziffer 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | Buchstabe, Ziffer oder Unterstrich (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Leerraum, einschließlich Tabulatoren und Zeilenumbrüchen | /\s+/ | two spaces | |
. | Beliebiges Zeichen außer Zeilenumbruch (außer mit s) | /a.c/ | abc a-c | abc |
^ $ | Anfang und Ende der Eingabe (oder der Zeile, mit m) | /^\w+$/ | single | single |
[abc] | Eines der aufgelisteten Zeichen | /[aeiou]/ | rhythm and blues | a |
[^abc] | Beliebiges nicht aufgelistetes Zeichen | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 oder mehr, 1 oder mehr, 0 oder 1 | /colou?r/ | color colour | color |
{n,m} | Zwischen n- und m-mal | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Erfassende Gruppe | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Benannte erfassende Gruppe | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Gruppe ohne Erfassung | /(?:ab)+/ | ababab! | ababab |
a|b | Eine der beiden Seiten | /cat|dog/ | hotdog | dog |
\b | Wortgrenze | /\bcat\b/ | concat cat | cat |
(?=…) | Gefolgt von (Lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Nicht vorangegangen von (negatives Lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Beliebiger Unicode-Buchstabe (braucht u) | /\p{L}+/u | naïve 東京 | naïve |
Die sechs Flags und was sie bewirken
g (global) findet alle Treffer, statt beim ersten aufzuhören; ohne dieses Flag enthält die Liste nur einen Eintrag. i ignoriert die Groß- und Kleinschreibung. m (multiline) bewirkt, dass ^ und $ am Anfang und Ende jeder Zeile passen und nicht nur am Anfang und Ende des gesamten Textes. Das brauchen Sie etwa für ein Muster wie Leerzeichen am Zeilenende. s (dotAll, seit ES2018) lässt . auch Zeilenumbrüche treffen. u (unicode) behandelt den Text als Codepoints, sodass ein Emoji als ein Zeichen zählt, und aktiviert Eigenschafts-Escapes wie \p{L} für jeden Buchstaben in jeder Schrift. y (sticky) trifft nur genau an der aktuellen Position, der Modus, den Tokenizer verwenden. JavaScript kennt außerdem d für Treffer-Indizes und v für Mengenoperationen in Zeichenklassen; dieser Tester beschränkt sich auf die sechs oben genannten Flags.
Unter dem Testtext zeigt jeder Treffer seinen Index und seine Gruppen. Nummerierte Gruppen entstehen durch einfache runde Klammern, (?:…) gruppiert ohne zu erfassen, und (?<year>\d{4}) erzeugt eine benannte Gruppe, die unter ihrem Namen erscheint, wie das ISO-Datum-Beispiel zeigt. Das Menü Häufige Muster fügt geprüfte Ausgangspunkte für E-Mail-Adressen, URLs, IPv4-Adressen, Hex-Farben, UUIDs, doppelte Wörter und Leerzeichen am Zeilenende ein. Verstehen Sie das E-Mail-Muster als Plausibilitätsprüfung, nicht als Validierung: Die vollständige Grammatik von Adressen ist weit großzügiger, und der einzige echte Test ist das Versenden einer Nachricht.
Lookbehind und katastrophales Backtracking
Lookarounds prüfen, was eine Position umgibt, ohne es zu verbrauchen. Lookahead, (?=…) und (?!…), gehört schon immer zu JavaScript; Lookbehind, (?<=…) und (?<!…), kam mit ES2018 und war in allen großen Browsern verfügbar, als Safari 16.4 es 2023 einführte. So findet (?<=\$)\d+ in „$42“ die 42, ohne das Dollarzeichen einzubeziehen. Anders als viele andere Engines erlaubt JavaScript Lookbehind beliebiger Länge.
Die JavaScript-Engine arbeitet mit Backtracking: Scheitert ein Pfad, geht sie zurück und probiert die Alternativen. Verschachtelte Quantifizierer wie (a+)+$ geben ihr exponentiell viele Möglichkeiten, denselben Text aufzuteilen, sodass eine Zeichenfolge aus 30 a gefolgt von einem x Sekunden dauern kann und ein paar Buchstaben mehr Stunden. Das ist katastrophales Backtracking, und auf Servern wird daraus ReDoS, ein Denial-of-Service-Angriff; eine einzige WAF-Regel mit diesem Fehler legte am 2. Juli 2019 das Netzwerk von Cloudflare für etwa eine halbe Stunde lahm. Da dieser Tester in Ihrem Tab läuft, kann ein solches Muster die Seite einfrieren; laden Sie neu und schreiben Sie das Muster so um, dass nie zwei Quantifizierer dieselben Zeichen beanspruchen können, mit engeren Klassen wie [^,]* statt .* oder mit Ankern. Zum Bearbeiten des Textes selbst statt zum Suchen von Mustern finden Sie die Text-Tools; weitere Werkzeuge für Entwickler gibt es in der Entwickler-Tools-Übersicht.
Häufig gestellte Fragen
- Warum findet mein regulärer Ausdruck nur einen Treffer?
- Das g-Flag ist ausgeschaltet. Ohne es hört die Engine nach dem ersten Treffer auf. Aktivieren Sie g, um alle Vorkommen aufzulisten; das y-Flag allein findet ebenfalls mehrere, aber nur, wenn sie direkt aufeinanderfolgen.
- Erkennt \d in JavaScript auch Ziffern aus anderen Schriftsystemen?
- Nein. In JavaScript steht \d nur für 0 bis 9 und \w nur für ASCII-Buchstaben, Ziffern und den Unterstrich, auch mit dem u-Flag. Verwenden Sie für andere Schriften \p{Nd} oder \p{L} mit u.
- Verhält sich ein hier getestetes Muster in Python oder PHP genauso?
- Die Grundsyntax lässt sich übernehmen, aber im Detail gibt es Unterschiede: Benannte Gruppen schreibt Python als
(?P<name>…), PHP und Python unterstützen possessive Quantifizierer, die JavaScript fehlen, und die Regeln für Lookbehind unterscheiden sich. Testen Sie noch einmal in der Ziel-Engine. - Wie finde ich einen echten Punkt oder eine Klammer?
- Maskieren Sie es mit einem Backslash:
\.trifft einen Punkt und\[eine öffnende eckige Klammer. In einer Zeichenklasse sind die meisten Symbole bereits wörtlich gemeint, daher trifft auch[.]nur einen Punkt. - Warum ist die Seite beim Eintippen eines Musters eingefroren?
- Das Muster hat bei Ihrem Text vermutlich katastrophales Backtracking ausgelöst. Laden Sie die Seite neu, vermeiden Sie dann verschachtelte Quantifizierer wie
(.*)*oder(a+)+und sorgen Sie dafür, dass jeder Teil so wenig wie möglich trifft.