Regex-Tester

Schreiben Sie einen regulären Ausdruck, fügen Sie Testtext ein und sehen Sie Treffer live hervorgehoben — mit Erfassungsgruppen, Flags und klaren Fehlermeldungen.

1.031 Aufrufe

Wie es funktioniert

Ein regulärer Ausdruck beschreibt ein Zeichenmuster statt einer wörtlichen Zeichenkette, sodass ein kurzer Ausdruck eine ganze Familie von Texten erfassen kann: jede E-Mail-Adresse, jede Telefonnummer in mehreren Formaten, jede Zeile in einer Log-Datei, die mit "ERROR" beginnt. Geben Sie einen JavaScript-regulären-Ausdruck ein, schalten Sie seine Flags um (g alle Treffer, i Groß-/Kleinschreibung ignorieren, m mehrzeilige Anker, s Punkt matcht auch Zeilenumbruch, u vollständiges Unicode) und fügen Sie Beispieltext ein: Jeder Treffer wird direkt hervorgehoben und darunter mit Position und etwaigen Erfassungsgruppen aufgelistet. Klammern () erzeugen eine Erfassungsgruppe — eine Möglichkeit, ein bestimmtes Stück des gefundenen Texts herauszuziehen, etwa die Domain aus einer E-Mail-Adresse oder das Jahr aus einem Datum, statt nur zu wissen, dass ein Treffer vorliegt.

Eine Unterscheidung bringt so gut wie jeden anfangs zu Fall: gierige (greedy) versus faule (lazy) Quantoren. .* ist gierig — es versucht, so viel Text wie möglich zu erfassen, und geht nur bei Bedarf zurück (Backtracking). Bei der Eingabe <b>bold</b> and <i>italic</i> erfasst das Muster <.*> gierig alles vom ersten < bis zum allerletzten > und verschluckt dabei beide Tags. Fügt man ein ? hinzu, wird aus .*? ein fauler Quantor — er erfasst so wenig wie möglich, sodass <.*?> beim ersten > stoppt und korrekt nur <b> erfasst. Genau dieser Unterschied ist der Grund, warum naive HTML-Muster an echtem Markup scheitern.

Was Sie wissen sollten

Die Engine hier ist die native JavaScript-(ECMAScript-)Regex-Implementierung Ihres Browsers, sodass ein hier passendes Muster identisch in Ihrem JS-Code passt — es gibt keine Übersetzungsschicht, die dazwischenfunkt. Die Regex-Varianten anderer Sprachen — PCRE (PHP), Pythons re, Javas Pattern — teilen den größten Teil der Kernsyntax (Zeichenklassen, Quantoren, Gruppen), weichen aber bei fortgeschrittenen Funktionen ab: Lookbehind-Unterstützung, Syntax für benannte Gruppen, besitzergreifende (possessive) Quantoren und manche Escape-Sequenzen unterscheiden sich. Testen Sie Grenzfälle vor dem Einsatz stets erneut in der tatsächlichen Zielsprache.

Achten Sie auf katastrophales Backtracking: Muster mit verschachtelten oder sich überlappenden Quantoren, wie (a+)+b gegen eine lange Zeichenkette aus "a" ohne abschließendes "b" getestet, können die Engine in exponentielles Backtracking zwingen und die Seite — oder aus demselben Grund Ihren Produktionsserver — einfrieren lassen. Hängt sich ein Muster hier auf, kürzen Sie zuerst den Testeingabetext und strukturieren Sie dann das Muster um (oft durch vollständiges Entfernen der verschachtelten Wiederholung), statt einfach mehr Rechenleistung dagegenzuwerfen. Alles läuft lokal in Ihrem Browser; kein Muster und kein Text wird jemals übertragen.

Häufig gestellte Fragen

Welche Regex-Variante wird verwendet?

JavaScript (ECMAScript) — die native Engine des Browsers. Muster verhalten sich genau wie in Ihrem JS-Code; PCRE und Python teilen die meiste Syntax, unterscheiden sich aber bei einigen fortgeschrittenen Konstrukten.

Was bedeuten die Flags?

g findet alle Treffer statt nur den ersten; i ignoriert Groß-/Kleinschreibung; m lässt ^ und $ pro Zeile greifen; s lässt den Punkt auch Zeilenumbrüche matchen; u aktiviert vollständige Unicode-Verarbeitung.

Warum friert mein Muster die Seite ein?

Bestimmte Muster mit verschachtelten Quantoren (wie (a+)+b) können bei langen Eingaben katastrophal zurückverfolgen (Backtracking). Kürzen Sie den Testtext oder überarbeiten Sie das Muster — dasselbe Einfrieren würde auch Ihren Produktionscode treffen.

Was ist eine Erfassungsgruppe und warum ist sie wichtig?

Klammern um einen Teil eines Musters erzeugen eine Erfassungsgruppe, die genau diese Teilzeichenkette getrennt vom Gesamttreffer extrahiert — zum Beispiel liefert (\d{4})-(\d{2})-(\d{2}) gegen ein Datum getestet Jahr, Monat und Tag als drei einzelne Erfassungen, statt nur zu bestätigen, dass die gesamte Zeichenkette wie ein Datum aussah. Nicht erfassende Gruppen, geschrieben als (?:...), gruppieren nur strukturell, ohne eine zusätzliche Erfassung zu erzeugen.

Warum hat mein Muster mehr (oder weniger) Text erfasst als erwartet?

Fast immer eine Verwechslung von gierig und faul. .* und ähnliche Quantoren erfassen standardmäßig so viel wie möglich; fügen Sie ein ? hinzu (.*?, +?), um sie faul zu machen und beim ersten statt beim letzten möglichen Punkt zu stoppen. Dieses eine Zeichen ist meist die Lösung, wenn ein Regex über mehrere Zeilen oder Tags hinweg zu viel erfasst.

Kommentare

Noch keine Kommentare — schreiben Sie den ersten!

Ähnliche Tools