Regex-Tester
Testen Sie JavaScript-reguläre Ausdrücke live. Sehen Sie Treffer hervorgehoben und Capture-Gruppen aufgelistet.
Hervorgehobene Treffer
Treffer & Gruppen
- Tippen Sie Ihr Regex-Muster in das obige Feld (keine Notwendigkeit, es in Schrägstriche zu wickeln).
- Schalten Sie die gewünschten Flags um: g für alle Treffer, i für Groß-/Kleinschreibung ignorieren usw.
- Fügen Sie den Teststring in das Teststring-Feld ein oder tippen Sie ihn.
- Beobachten Sie, wie Treffer in Echtzeit hervorgehoben werden; untersuchen Sie erfasste Gruppen in der Tabelle unten.
Was macht es?
Dieser Tester führt Ihr Muster gegen den Teststring mit der nativen RegExp-Engine des Browsers aus — derselben, die Node.js, Deno und jeder Browser verwenden. Treffer werden inline hervorgehoben. Nummerierte und benannte Capture-Gruppen werden in eine Tabelle extrahiert, sodass Sie genau sehen können, was jedes Klammersegment erfasst hat.
Beispiel
Muster (mit Flag g):
\b(\w+)@(\w+\.\w+)\b Teststring:
Contact us at [email protected] or [email protected]. Not an email: foo@bar (no TLD). Treffer:
1 [email protected] $1: hello $2: example.com
2 [email protected] $1: support $2: happycoder.dev foo@bar trifft nicht, weil \w+\.\w+ einen Punkt in der Domain benötigt.
Warum trifft mein Regex nicht?
- Flag g vergessen. Ohne es wird nur der erste Treffer zurückgegeben. /cat/.exec("cat cat") findet ein "cat"; /cat/g findet beide.
- Nicht-escapete Metazeichen. example.com trifft auch auf examplexcom, weil . jedes Zeichen trifft. Escapen Sie: example\.com.
- Gieriges Matching verbraucht zu viel. <.*> bei <a><b> erfasst die ganze Sache. Verwenden Sie lazy <.*?> oder <[^>]*>, um am ersten > zu stoppen.
- Wortgrenzen-Verwirrung. \b ist eine Position zwischen einem Wortzeichen und einem Nicht-Wortzeichen. Muster wie \bfoo-bar\b scheitern, weil - in der Mitte bereits eine Nicht-Wort-Grenze ist.
- Groß-/Kleinschreibung stimmt nicht überein. [a-z]+ trifft nicht auf Hello. Fügen Sie das Flag i hinzu oder schließen Sie [A-Za-z]+ ein.
- Mehrzeilige ^ / $. Ohne das Flag m verankern sie nur an der gesamten Zeichenkette, nicht an jeder Zeile. Aktivieren Sie m, wenn Sie Log-Zeilen scannen.
Häufig gestellte Fragen
Welche Regex-Variante verwendet dieser Tester?
JavaScript (ECMAScript) Regex, über die eingebaute RegExp-Engine des Browsers. Das unterscheidet sich von PCRE (PHP, Perl), Pythons re-Modul und POSIX-Regex in mehrerer Hinsicht: keine Rekursion, keine possessiven Quantifizierer, benannte Gruppen verwenden (?<name>...) statt (?P<name>...), und Zeichenklassen-Kurzformen wie \d sind nur ASCII, es sei denn, Sie fügen das Flag u hinzu.
Unterstützt er Lookbehind?
Ja. Lookbehind-Assertions wie (?<=foo)bar und (?<!foo)bar wurden in ES2018 hinzugefügt und werden in allen aktuellen Chromium-, Firefox- und Safari-Builds unterstützt. Wenn Sie in der Produktion sehr alte Browser ansprechen, prüfen Sie caniuse, bevor Sie sich darauf verlassen — aber dieser Tester selbst führt sie problemlos aus.
Was bedeuten die Flags g, i, m, s und u?
g findet jeden Treffer statt nur den ersten. i macht das Matching unempfindlich gegen Groß-/Kleinschreibung. m lässt ^ und $ den Anfang und das Ende jeder Zeile statt der gesamten Zeichenkette treffen. s (dotall) lässt . Zeilenumbrüche treffen. u aktiviert die vollständige Unicode-Behandlung und strengeres Escape-Parsing. Wählen Sie nur die Flags, die Sie brauchen — besonders g ändert, wie viele Treffer Sie bekommen.
Warum trifft mein gieriger Quantifizierer zu viel?
Quantifizierer wie *, + und {n,} sind standardmäßig gierig — sie treffen so viel wie möglich und geben nur zurück, wenn der Rest des Musters fehlschlägt. Fügen Sie ein ? hinzu, um sie lazy zu machen: .*? trifft so wenig wie möglich. Übliche Lösung für <a>.*</a>, das über mehrere Tags frisst: verwenden Sie <a>.*?</a> oder die negierte Klasse <a>[^<]*</a>.
Wie referenziere ich später eine erfasste Gruppe im Muster oder in der Ersetzung?
Innerhalb des Musters verwenden Sie \1, \2 usw., um denselben Text zu treffen, den eine vorherige Gruppe erfasst hat — (\w+)\s+\1 trifft wiederholte Wörter. In einer Ersetzungszeichenkette (in diesem Live-Tester nicht unterstützt, aber in String.replace) verwenden Sie $1, $2. Benannte Gruppen verwenden \k<name> innerhalb des Musters und $<name> in Ersetzungen.
Warum bricht mein Regex, wenn das Muster einen Punkt, Schrägstrich oder Klammern enthält?
Das sind Regex-Metazeichen. Um sie wörtlich zu treffen, escapen Sie mit einem Backslash: \. für einen Punkt, \/ für einen Schrägstrich (optional in einer new RegExp-Zeichenkette, erforderlich zwischen /.../ Literalen), \( und \) für Klammern. Die Sonderzeichen sind . * + ? ^ $ { } ( ) | [ ] \ — jedes dieser als wörtlicher Text muss escapt werden.
Speichern Sie den Regex oder Testtext, den ich hier eingebe?
Nein. Wir speichern die Muster, die Sie schreiben, oder den Text, gegen den Sie sie testen, nicht. Alles, was Sie eingeben, wird in dem Moment verworfen, in dem Sie den Tab schließen oder aktualisieren — keine Logs, keine Aufzeichnung bei uns dessen, was Sie getroffen haben. Wenn Sie zusätzliche Sicherheit wünschen, bestätigen die Entwicklertools Ihres Browsers das.