Regex-Tester
Testen Sie JavaScript-reguläre-Ausdrücke gegen Beispieltext mit Live-Hervorhebung, Erfassungsgruppen, benannten Gruppen und einer Ersetzungsvorschau. Läuft vollständig in Ihrem Browser.
- Dateien verlassen niemals Ihr Gerät
- Kostenlos, keine Anmeldung
- Keine Wasserzeichen
- Funktioniert nach dem Laden auch offline
So verwenden Sie Regex-Tester
- 1
Muster eingeben
Den Ausdruck schreiben und die benötigten Flags wählen.
- 2
Testtext hinzufügen
Übereinstimmungen werden beim Tippen hervorgehoben, mit jeder Erfassungsgruppe aufgelistet.
- 3
Eine Ersetzung testen
Der Ersetzungs-Tab zeigt eine Vorschau des Ergebnisses mit Referenzen im $1-Stil.
Warum Live-Hervorhebung besser ist, als ein Muster im Kopf zu lesen
Ein regulärer Ausdruck ist wirklich schwer mental gegen echten Text nachzuverfolgen — ein Muster wie `(\d{3})-(\d{2})-(\d{4})` ist als abstrakte Beschreibung lesbar genug, aber zu bestätigen, dass es exakt die beabsichtigten Teilzeichenketten trifft, und nur diese, gegen einen bestimmten Block Beispieltext ist eine andere Art der Prüfung, als das Muster zu lesen und darüber nachzudenken. Jede Übereinstimmung direkt im Beispieltext hervorzuheben, während das Muster geschrieben wird, verwandelt dieses abstrakte Denken in eine konkrete, sofortige visuelle Bestätigung — Übereinstimmungen erscheinen, wo erwartet, oder nicht, ohne mentale Simulation.
Das wird besonders wertvoll bei allem, das Lookahead, Lookbehind, oder nicht-gierige Quantoren nutzt, wo die echten Übereinstimmungsgrenzen oft nicht das sind, was jemand allein durch Lesen des Musters raten würde. Genau zu sehen, wo eine Übereinstimmung beginnt und endet, statt anzunehmen, erkennt einen Off-by-one-Grenzfehler sofort statt nach der Veröffentlichung in einer Validierungsfunktion.
JavaScript-Regex ist nicht dieselbe Sprache wie PCRE oder Pythons re
Regex-Syntax wirkt zwischen Sprachen weithin ähnlich, aber die genau unterstützten Funktionen unterscheiden sich auf Weisen, die zählen, sobald ein Muster etwas über die Grundlagen hinaus nutzt. JavaScript fehlen possessive Quantoren und atomare Gruppen, beide in PCRE existent (genutzt von PHP und vielen anderen Tools) als Wege, bestimmte Rückverfolgungsmuster explizit zu verhindern. Lookbehind-Assertions, jetzt in JavaScript unterstützt, kamen deutlich später als Lookahead und waren in älteren Browserversionen nicht verfügbar, was für Code, der in Legacy-Umgebungen laufen muss, gelegentlich noch zählt. Und `\d` in einem JavaScript-Muster passt nur auf ASCII-Ziffern 0–9, außer das Muster trägt auch das `u`-Flag (Unicode), was jeden überrascht, der annimmt, es verhalte sich wie eine Unicode-bewusste Ziffernklasse in der Regex-Engine einer anderen Sprache. Ein speziell für JavaScript bestimmtes Muster zu testen, statt ein für Python oder ein Shell-Tool geschriebenes Beispiel zu kopieren, ist es, wofür dieses Tool gebaut ist.
Katastrophales Backtracking, und warum der Tester ein Zeitbudget hat
Bestimmte Regex-Muster — am häufigsten solche mit verschachtelten Quantoren wie `(a+)+b` — haben eine pathologische Eigenschaft, bei der der Motor gegen eine lange, letztlich nicht übereinstimmende Zeichenkette eine exponentiell wachsende Anzahl von Rückverfolgungswegen erkundet, bevor er aufgibt. Ein Muster, das sofort Ergebnisse gegen eine nicht übereinstimmende Zehn-Zeichen-Kette liefert, kann bei einer Fünfzig-Zeichen-Kette länger als das Alter des Universums brauchen, was keine Übertreibung ist, sondern das buchstäbliche mathematische Verhalten exponentiellen Wachstums. Das ist eine echte, ausnutzbare Schwachstellenklasse in Produktionssystemen — ein ReDoS, oder Denial of Service durch regulären Ausdruck — bei der ein Angreifer, der die Eingabezeichenkette zu einem verwundbaren Muster kontrolliert, einen Serverprozess mit einer einzigen Anfrage unbegrenzt lahmlegen kann.
Dieses Tool bricht die Auswertung nach einem kurzen Zeitbudget ab, speziell damit ein Muster mit dieser Eigenschaft die Testsitzung statt den gesamten Browser-Tab einfriert, und dieses Abbrechen zu erreichen ist selbst nützliche Information: Es bedeutet, das Muster hat wahrscheinlich genau diese Schwachstelle und muss umstrukturiert werden, typischerweise indem ein innerer Quantor spezifischer gemacht wird, damit die Mehrdeutigkeit, die exponentielles Backtracking verursacht, gar nicht erst entstehen kann.
Häufig gestellte Fragen
Welcher Regex-Dialekt ist das?
JavaScript (ECMAScript), was in Ihrem Browser läuft. Es unterscheidet sich in manchen Punkten von PCRE und Python — kein Lookbehind in sehr alten Browsern, keine possessiven Quantoren oder atomaren Gruppen, und `\d` passt nur auf ASCII-Ziffern, außer Sie nutzen das `u`-Flag.
Was ändert das globale Flag wirklich?
Ohne `g` wird nur die erste Übereinstimmung gefunden. Damit werden alle Übereinstimmungen zurückgegeben — was Sie wollen, um ein ganzes Dokument hervorzuheben oder zu ersetzen. Dieses Tool zeigt trotzdem alle Übereinstimmungen, aber das Flag beeinflusst weiterhin, wie sich `replace` verhält.
Warum ist mein Muster in ein Timeout gelaufen?
Manche Muster laufen katastrophal zurück — verschachtelte Quantoren wie `(a+)+b` können exponentielle Zeit bei einer nicht übereinstimmenden Zeichenkette brauchen. Das Tool bricht nach einem kurzen Zeitbudget ab, statt Ihren Tab einzufrieren. Tritt das auf, ist die Lösung fast immer, den inneren Quantor spezifischer zu machen.
Wie nutze ich Erfassungsgruppen in einer Ersetzung?
Referenzieren Sie sie als `$1`, `$2` und so weiter, oder `$<name>` für benannte Gruppen, geschrieben als `(?<name>…)`. Nutzen Sie `$&` für die gesamte Übereinstimmung und `$$` für ein literales Dollarzeichen.
Das könnte Sie auch interessieren
JSON-Formatierer
JSON sofort formatieren, validieren und minifizieren
URL-Encoder und -Decoder
URLs und Query-Zeichenketten mit Prozent-Kodierung kodieren und dekodieren
Duplikat-Zeilen entfernen
Listen deduplizieren, sortieren und bereinigen
Base64-Encoder und -Decoder
Base64 und Base64URL kodieren und dekodieren
CSS-Formatierer
Stylesheets verschönern oder minifizieren
CSS-Minifizierer
Stylesheets mit einem echten CSS-bewussten Minifizierer verkleinern
Hash-Generator
MD5, SHA-1, SHA-256, SHA-384 und SHA-512
HTML-Formatierer
HTML korrekt verschönern und einrücken