Anleitung: Regex Tester
- Gib dein Muster zwischen den Schrägstrichen ein, ohne die umschließenden
/. - Schalte Flags wie
g (alle Treffer), i (Groß-/Kleinschreibung ignorieren) und m (mehrzeilig) um. - Füge deinen Testtext ein. Treffer werden rechts hervorgehoben und darunter mit Index und Capture-Gruppen aufgelistet.
- Aktiviere Ersetzen und gib eine Ersetzung wie
$1 oder $<name> ein, um String.replace vorab zu sehen. - Wähle ein Muster aus der Musterbibliothek, um mit einer getesteten Regex für E-Mail, URL, IP oder Datum zu starten.
Reguläre Ausdrücke in JavaScript
Dieser Tester verwendet die RegExp-Engine deines Browsers, die Ergebnisse entsprechen also exakt dem, was String.match, matchAll, replace und RegExp.exec in JavaScript und Node.js liefern. Das schließt moderne Syntax ein: benannte Gruppen (?<name>…), Lookbehind (?<=…), Unicode-Property-Escapes wie \p{L} mit dem Flag u und Trefferindizes mit dem Flag d.
Was die Flags bewirken
| Flag | Name | Wirkung |
g | global | Findet jeden Treffer, statt beim ersten aufzuhören. |
i | ignoreCase | Buchstaben passen unabhängig von Groß-/Kleinschreibung. |
m | multiline | ^ und $ passen am Anfang und Ende jeder Zeile. |
s | dotAll | . passt auch auf Zeilenumbrüche. |
u | unicode | Behandelt das Muster als Codepoints; aktiviert \p{…} und \u{…}. |
y | sticky | Matcht nur an der aktuellen Position lastIndex. |
d | hasIndices | Liefert Start- und Endposition für jede Capture-Gruppe. |
Schutz vor Catastrophic Backtracking
Muster mit verschachtelten Quantoren, etwa (a+)+$ oder (\w|\d)*x, können bei fast passenden Eingaben exponentiell lange brauchen. Auf einer normalen Webseite friert das den Tab ein. Hier läuft jedes Matching in einem Web Worker im Hintergrund, der nach einer Sekunde gestoppt wird, und du bekommst eine klare Warnung statt eines hängenden Browsers. Dasselbe Muster könnte im Produktionscode eine ReDoS-Schwachstelle sein, behandle die Warnung also als Bug, den du beheben solltest.
Tipps für bessere Regexe
- Verankere Muster mit
^ und $, wenn du ganze Werte validierst, sonst genügt ein Treffer irgendwo im String.
- Bevorzuge spezifische Klassen wie
[^"]* statt .*; sie sind schneller und vermeiden zu gierige Treffer.
- Verwende nicht erfassende Gruppen
(?:…), wenn du den erfassten Wert nicht brauchst.
- Benenne deine Gruppen.
match.groups.year liest sich leichter als match[1].
Häufig gestellte Fragen
Welche Regex-Variante verwendet dieser Tester?
JavaScript (ECMAScript), über das eingebaute RegExp deines Browsers. Der Großteil der Syntax ist mit PCRE, Python und Java identisch, aber Features wie possessive Quantoren, atomare Gruppen und Inline-Modifikatoren wie (?i) gibt es in JavaScript nicht.
Warum findet mein Muster nur einen Treffer?
Ohne das Flag g (global) hört JavaScript nach dem ersten Treffer auf. Aktiviere g, um jedes Vorkommen zu finden.
Wie referenziere ich Gruppen in der Ersetzung?
Verwende $1, $2 … für nummerierte Gruppen, $<name> für benannte Gruppen, $& für den gesamten Treffer und $$ für ein wörtliches Dollarzeichen.
Warum hat der Tester mit einem Timeout abgebrochen?
Das Muster hat bei deiner Eingabe länger als eine Sekunde gebraucht, was fast immer auf Catastrophic Backtracking hindeutet. Suche nach verschachtelten Quantoren wie (x+)+ oder überlappenden Alternativen wie (a|a)* und schreibe sie so um, dass jedes Zeichen nur auf eine Weise gematcht werden kann.
Werden meine Testdaten irgendwohin gesendet?
Nein. Das Matching läuft lokal in einem Web Worker in deinem Browser. Muster und Text werden nur in deinem eigenen Browser gespeichert, damit sie beim nächsten Besuch noch da sind.