Regex-Tester
Einen regulären Ausdruck live testen: Treffer und Fanggruppen sehen, Ersetzungen in der Vorschau prüfen und Text teilen — mit JavaScript-Semantik.
Muster und Text eingeben, um Ergebnisse zu sehen
Was dieses Werkzeug tut
Ein regulärer Ausdruck ist eine kompakte Sprache zum Beschreiben von Textmustern, und die einzig verlässliche Art, einen zu schreiben, ist, ihm bei der Arbeit an echtem Text zuzusehen. Genau das tut dieser Tester, live, in drei Modi. Treffer zeigt jede Stelle, an der das Muster passt, hervorgehoben im Text, mit jeder Fanggruppe darunter aufgelistet. Ersetzen zeigt in der Vorschau, was String.replace erzeugen würde, einschließlich der Referenzen $1 und lt;name>. Teilen zeigt, wie String.split den Text zerschneiden würde — einschließlich der Teile, die kaum jemand richtig vorhersagt, etwa gefangene Trennzeichen, die im Ergebnis auftauchen.
Das Muster läuft auf der JavaScript-Engine Ihres eigenen Browsers, nicht auf einer Nachahmung. Was hier passt, passt exakt genauso in Ihrem JavaScript-Code, Byte für Byte — denn es ist dieselbe Engine, die die Arbeit macht.
Die Trefferergebnisse lesen
Jeder Treffer wird im Testtext hervorgehoben und darunter mit seiner Position aufgeführt — den Zeichen-Offsets, an denen er beginnt und endet. Enthält das Muster Fanggruppen, erscheint jede Gruppe unter ihrem Treffer mit dem gefangenen Wert. Gruppen werden nach ihrer öffnenden Klammer nummeriert, von links nach rechts, exakt so, wie die Engine sie für $1, $2 und Rückreferenzen nummeriert; eine benannte Gruppe zeigt ihren Namen neben ihrer Nummer. Eine Gruppe, die am Treffer nicht beteiligt war — etwa die unterlegene Seite einer Alternative — wird als solche markiert statt als leere Zeichenkette angezeigt, denn für Ihren Code sind das verschiedene Dinge: undefined gegenüber "".
Ein Muster kann völlig legitim null Zeichen treffen — ^, \b oder eine leere Alternative können das alle. Solche Treffer der Länge null heben nichts hervor, deshalb markiert das Werkzeug die Position mit einem dünnen Strich, statt Sie rätseln zu lassen, wo der Treffer geblieben ist.
Die Flags
Flags ändern das Verhalten des gesamten Musters, und zwei von ihnen verursachen den Großteil der Regex-Verwirrung:
- g (global) — findet jeden Treffer, nicht nur den ersten. Ohne dieses Flag zeigt Treffer ein Ergebnis, und Ersetzen ändert ein einziges Vorkommen. Es ist das am häufigsten vergessene Flag.
- i (Groß-/Kleinschreibung ignorieren) — Buchstaben passen unabhängig von ihrer Schreibung.
- m (mehrzeilig) — ^ und $ passen am Anfang und Ende jeder Zeile, nicht nur des gesamten Texts.
- s (dotAll) — der Punkt trifft auch Zeilenumbrüche. Ohne dieses Flag stoppt . an jedem Umbruch.
- u (Unicode) — das Muster arbeitet in Codepunkten: Emoji und andere Zeichen außerhalb des Grundbereichs verhalten sich korrekt, und \p{…}-Eigenschafts-Escapes werden verfügbar.
- y (verankert) — der Treffer muss exakt dort beginnen, wo der vorige endete. Nützlich für Tokenizer; überall sonst überraschend.
- d (Indizes) — die Engine zeichnet die genauen Positionen jeder Gruppe auf. Am Ergebnis ändert das nichts.
Ersetzungsreferenzen
Der Ersetzungstext wird nicht wörtlich genommen — eine Handvoll $-Sequenzen wird für jeden Treffer expandiert. $1 bis $9 fügen ein, was die nummerierten Gruppen gefangen haben, lt;name> fügt eine benannte Gruppe ein, amp; den gesamten Treffer, und $ erzeugt ein wörtliches Dollarzeichen. Alles andere wird unverändert kopiert.
"2026-07-20".replace(/(?<y>\d{4})-(\d{2})-(\d{2})/, "$3.$2.lt;y>")
// → "20.07.2026"Ein JavaScript-Verhalten, das man verinnerlichen sollte: Ohne das g-Flag ändert replace nur das erste Vorkommen. Das ist keine Eigenheit dieses Werkzeugs — genau das wird Ihr Code tun. Das Werkzeug zeigt einen Hinweis, wenn g aus ist, damit die einzelne Ersetzung nicht wie ein Fehler wirkt.
Wie sich split wirklich verhält
String.split mit einer Regex hat zwei Verhaltensweisen, die selbst erfahrene Entwickler regelmäßig überraschen, und der Teilen-Modus existiert vor allem, um sie sichtbar zu machen. Erstens: Enthält das Muster Fanggruppen, wird das Gefangene zwischen den Stücken in das Ergebnis-Array eingeflochten — "a,b" mit (,) zu teilen ergibt drei Teile: a, das Komma, b. Zweitens: Treffer ganz am Anfang oder Ende des Texts oder zwei direkt benachbarte Treffer erzeugen leere Zeichenketten im Ergebnis, die das Werkzeug ausdrücklich anzeigt statt sie zu verstecken.
"a,b".split(/(,)/) // → ["a", ",", "b"] ",a,".split(/,/) // → ["", "a", ""]
Durchgehende Muster werden gestoppt, nicht ertragen
Manche Muster sind Fallen. Ein verschachtelter Quantor wie (a+)+, angewendet auf eine lange Zeichenkette, die beinahe passt, zwingt die Engine, exponentiell viele Kombinationen durchzuprobieren, bevor sie aufgibt — das nennt sich katastrophales Backtracking und kann einen Browser-Tab minutenlang einfrieren. Dieses Werkzeug führt Ihr Muster in einem separaten Worker-Thread aus und stoppt es nach zwei Sekunden: Ein durchgehendes Muster kostet Sie eine Meldung statt einer eingefrorenen Seite. Wenn Sie diese Meldung sehen, suchen Sie im Muster nach verschachtelten Quantoren oder überlappenden Alternativen; die Lösung besteht meist darin, dass innere und äußere Wiederholung nicht denselben Text treffen können.
Wie bei jedem Werkzeug auf dieser Seite verlassen Muster und Text nie Ihr Gerät — der Worker ist Teil der Seite, kein Server.
Häufig gestellte Fragen
- Welchen Regex-Dialekt verwendet dieser Tester?
- JavaScript (ECMAScript), denn das Muster läuft auf der Engine des Browsers selbst. Benannte Gruppen, Lookbehind und \p{…}-Unicode-Eigenschafts-Escapes funktionieren wie in modernem JavaScript. Muster aus PCRE oder Python lassen sich meist übertragen, aber Konstrukte, die JavaScript fehlen — possessive Quantoren, atomare Gruppen, \A und \z — werden abgelehnt oder bedeuten etwas anderes.
- Warum findet mein Muster nur einen Treffer?
- Fast immer: Das g-Flag ist aus. Ohne dieses Flag stoppt JavaScript beim ersten Treffer, und replace ändert nur das erste Vorkommen. Aktivieren Sie das g-Kästchen, um den gesamten Text zu durchsuchen.
- Was bedeutet „nicht beteiligt" bei einer Gruppe?
- Die Gruppe existiert im Muster, wurde aber in diesem konkreten Treffer nicht verwendet — typischerweise, weil sie im unterlegenen Zweig einer Alternative liegt oder unter einem Quantor, der null Mal gepasst hat. Im Code ist ihr Wert undefined, was etwas anderes ist als eine gefangene leere Zeichenkette — das Werkzeug hält die beiden auseinander.
- Wird mein Muster oder Text an einen Server gesendet?
- Nein. Der Abgleich läuft vollständig in Ihrem Browser, in einem Worker-Thread derselben Seite. Auch das Zwei-Sekunden-Sicherheitslimit wird lokal durchgesetzt — nichts, was Sie eingeben, verlässt Ihr Gerät.