Regex-Tester

Teste reguläre Ausdrücke mit Live-Hervorhebung der Treffer.

Über dieses Tool

Schreib einen regulären Ausdruck in JavaScript, schalte Flags um und sieh jeden Treffer beim Tippen hervorgehoben, samt Capture-Gruppen und Ersetzungsvorschau.

So verwendest du es

  1. Gib einen regulären Ausdruck in das Musterfeld ein, ohne die umgebenden Schrägstriche.
  2. Schalte Flags um: g für alle Treffer, i zum Ignorieren der Groß-/Kleinschreibung, m für mehrzeilige Anker, s, damit . auch Zeilenumbrüche trifft, u für Unicode.
  3. Füge Testtext ein und sieh jeden Treffer hervorgehoben, mit den Capture-Gruppen darunter.
  4. Aktiviere Ersetzen, um eine Ersetzung mit $1, $2 oder $<name> vorab zu sehen.

Fragen

Welche Regex-Variante ist das?
JavaScript (ECMAScript). Für alltägliche Muster ist es PCRE und Python sehr ähnlich, aber Lookbehind-Unterstützung, die Syntax benannter Gruppen und einige Escapes unterscheiden sich zwischen den Sprachen.
Wie finde ich einen echten Punkt oder eine Klammer?
Escape es mit einem Backslash: \. passt auf einen Punkt, \( auf eine Klammer, \[ auf eine eckige Klammer. Innerhalb einer Zeichenklasse wie [.] verlieren die meisten Zeichen ihre besondere Bedeutung.
Was ist der Unterschied zwischen .* und .*?
.* ist gierig und passt auf so viel wie möglich; .*? ist genügsam (lazy) und passt auf so wenig wie möglich. Genügsames Matching ist meist das, was du willst, wenn du Text zwischen zwei Markierungen herausziehst.
Wie funktionieren benannte Gruppen?
Schreib (?<name>...), um in eine benannte Gruppe zu erfassen. Ihr Wert wird in den Treffer-Details angezeigt, und du kannst ihn in einer Ersetzung als $<name> verwenden.
Warum matcht meine Regex einen leeren String?
Ein Muster, in dem alles optional ist, etwa a* oder (\d+)?, kann null Zeichen matchen – und tut das an jeder Stelle, an der nichts Längeres passt. Die Tabelle „Treffer-Details“ zeigt solche Treffer als (leer). Verwende + statt * oder mach mindestens einen Teil des Musters verpflichtend.
Wie verwende ich den gesamten Treffer in einer Ersetzung?
Schreib $& für den gesamten Treffer, $1 und $2 für nummerierte Gruppen, $<name> für benannte Gruppen und $$ für ein literales Dollarzeichen. Ersetzt du zum Beispiel \d+ durch [$&], wird jede Zahl in eckige Klammern gesetzt. Aktiviere das g-Flag, um jedes Vorkommen zu ersetzen statt nur das erste.
Kann eine Regex den Browser einfrieren?
Ja. Verschachtelte Quantoren wie (a+)+ oder (\w+\s?)*$ können bei Text, der fast passt, exponentiell backtracken – das nennt man Catastrophic Backtracking. Das Matching läuft in deinem Browser-Tab, die Seite kann also hängen, bis du sie schließt. Schreib das Muster so um, dass jedes Zeichen nur auf eine Weise gematcht werden kann, zum Beispiel a+ statt (a+)+.

Regex-Flags erklärt: g, i, m, s und u

Regex-Flags verändern das Verhalten des gesamten Musters. g (global) findet jeden Treffer, statt beim ersten aufzuhören. Ohne g hebt dieser Tester nur den ersten Treffer hervor, und „Ersetzen“ ändert nur das erste Vorkommen – genau wie String.replace in JavaScript. i ignoriert die Groß-/Kleinschreibung, /error/i passt also auf Error und ERROR. m lässt ^ und $ am Anfang und Ende jeder Zeile matchen, was du brauchst, wenn du ein Muster an einer Logdatei testest.

Das s-Flag, genannt dotall, lässt . auch Zeilenumbrüche matchen, sodass <p>.*?</p> mehrere Zeilen umfassen kann. Das u-Flag schaltet den Unicode-Modus ein: Emoji und andere Zeichen außerhalb der Basic Multilingual Plane zählen als ein Zeichen, Unicode-Property-Escapes werden verfügbar, und unbekannte Escapes wie \- außerhalb einer Zeichenklasse führen zu Fehlern, statt stillschweigend akzeptiert zu werden. Das Sticky-Flag y und das d-Flag für Trefferindizes gibt es hier nicht.

Regex mit echten Daten testen: so geht’s

Teste eine Regex an realistischen Beispielen, nicht nur am Idealfall. Füge Text ein, der Werte enthält, die passen sollen, und solche, die nicht passen sollen, und beobachte die Hervorhebung. Für ein ISO-Datum beginnst du mit \d\d\d\d-\d\d-\d\d und prüfst, dass 2026-11-08 aufleuchtet, 2026-1-8 aber nicht. Dann fällt auf, dass 12026-11-08 immer noch teilweise passt. Mit Wortgrenzen \b oder mit ^ und $ samt m-Flag behebst du das.

Die Tabelle „Treffer-Details“ listet jeden Treffer mit Index und Capture-Gruppen auf, nummeriert als $1, $2 usw., dazu benannte Gruppen mit ihrem Namen – so prüfst du am schnellsten, ob eine Gruppe das erfasst, was du erwartest. Bei E-Mail-Adressen musst du akzeptieren, dass keine praxistaugliche Regex den RFC vollständig abbildet: Ein Muster wie [\w.+-]+@[\w-]+\.[\w.-]+ fängt Tippfehler ab, die eigentliche Prüfung erledigt eine Bestätigungsmail. Um eine URL zu zerlegen, nimm stattdessen „URL kodieren, dekodieren und zerlegen“.

Eine getestete Regex in JavaScript, Python und grep verwenden

Ein hier getestetes Muster kannst du direkt in ein JavaScript-Regex-Literal wie /\d+/g übernehmen, ohne zusätzliches Escaping. Baust du es aus einem String, etwa mit new RegExp() oder in den meisten anderen Sprachen, muss jeder Backslash verdoppelt werden: Aus \d+ wird in einem normalen String-Literal "\\d+". Raw Strings in Python wie r"\d+" und Backtick-Strings in Go ersparen dir das Verdoppeln. Es zu vergessen ist der häufigste Grund, warum eine Regex im Tester funktioniert, im Code aber nicht.

Flags stehen in anderen Sprachen an anderer Stelle. Python nutzt re.IGNORECASE oder ein Inline-(?i), grep nutzt -i für die Groß-/Kleinschreibung, und -E oder -P wählt die Syntax. Auch Lookbehind unterscheidet sich: JavaScript erlaubt Lookbehind mit variabler Länge, das Python-Modul re verlangt dagegen eine feste Breite, deshalb scheitert (?<=\$|USD )\d+ dort. Mit „grep- und ripgrep-Befehle erstellen“ wird aus einem getesteten Muster ein sofort ausführbarer Befehl, bei dem jedes Flag erklärt ist.

Funktioniert etwas nicht, oder sieht ein Ergebnis falsch aus? Ein Problem mit diesem Tool melden