Kein Upload, 100% lokal, kein Konto

Tutorial

So testest du eine Regex, ohne etwas zu installieren

Du hast ein Muster geschrieben und musst wissen, ob es wirklich das trifft, was du erwartest, bevor du es in den Code einbaust. Ein Desktop-Tool zu installieren oder ein privates Log in eine beliebige Website zu kopieren ist übertrieben und oft riskant. Diese Anleitung zeigt, wie du eine Regex direkt im Browser gegen deinen eigenen Text laufen lässt, die Flags umschaltest, die das Verhalten ändern, die extrahierten Erfassungsgruppen liest und die Treffer direkt im Text hervorgehoben siehst, wobei das Muster und der Text deinen Tab nie verlassen.

Schritt für Schritt

  1. Öffne den Regex-Tester und tippe dein Muster in das Feld zwischen den beiden Schrägstrichen. Die Schrägstriche schreibst du nicht selbst: das Tool zeigt sie an, damit du das Muster so siehst, wie eine Engine es liest. Füge deinen Beispieltext in das Feld darunter ein, zum Beispiel ein paar Log-Zeilen, eine E-Mail-Liste oder einen Codeblock, den du durchsuchen willst.
    Ein Regex-Muster und eine Flags-Zeichenkette im Tester eingegeben, mit Beispieltext in das Feld darunter eingefügt
  2. Lege die Flags in dem kleinen Feld neben dem Muster fest. Die Flag g findet jeden Treffer, statt beim ersten aufzuhören; i macht den Treffer unabhängig von Groß- und Kleinschreibung; m sorgt dafür, dass die Anker ^ und $ den Anfang und das Ende jeder Zeile treffen statt des gesamten Texts; s lässt den Punkt auch Zeilenumbrüche treffen. Kombiniere sie frei, zum Beispiel gim.
  3. Drücke auf Testen. Jeder Treffer wird direkt in deinem Text hervorgehoben, und die Liste darunter zeigt jeden Treffer mit seiner Position und dem Wert jeder Erfassungsgruppe. Passe das Muster an und führe es erneut aus: die Vorschau aktualisiert sich, sodass du das Muster eingrenzen kannst, bis es genau das erfasst, was du gemeint hast, und nichts sonst.
    Das Testergebnis: Treffer direkt im Text hervorgehoben und eine Liste, die jede Trefferposition und ihre Erfassungsgruppen zeigt

Erfassungsgruppen, benannt und nummeriert

Eine Erfassungsgruppe ist der Teil deines Musters, der in Klammern steht, und damit holst du ein Stück aus jedem Treffer heraus, statt nur zu bestätigen, dass das Ganze getroffen hat. Nummerierte Gruppen werden von links nach rechts nach ihrer öffnenden Klammer gezählt: in (\d{4})-(\d{2})-(\d{2}) ist Gruppe 1 das Jahr, Gruppe 2 der Monat, Gruppe 3 der Tag. Benannte Gruppen nutzen die Syntax (?<name>...), sodass (?<year>\d{4}) sich weit besser liest als eine nackte Zahl, wenn das Muster wächst. Wenn du nur gruppieren willst, ohne zu erfassen, zum Beispiel um einen Quantifizierer auf mehrere Zeichen anzuwenden, nutze eine nicht-erfassende Gruppe (?:...), damit sie deine Ergebnisliste nicht überfüllt. Der Tester zeigt den Wert jeder Gruppe für jeden Treffer, was der schnellste Weg ist, zu bestätigen, dass du das richtige Stück herausziehst.

Wenn ein Muster hängt oder sich falsch verhält

Zwei Probleme tauchen immer wieder auf. Das erste ist katastrophales Backtracking: ein Muster wie (a+)+$, gegen eine lange nicht passende Zeichenkette ausgeführt, kann die Engine eine exponentielle Anzahl von Pfaden probieren lassen und einfrieren. Der Tester führt jeden Test in einem Web Worker mit einem kurzen Wachhund aus, sodass du statt eines hängenden Tabs eine klare Meldung erhältst und das Muster vereinfachen kannst, meist indem du einen Quantifizierer im Sinne possessiv machst, ihn verankerst oder verschachtelte Wiederholung vermeidest. Das zweite ist gieriges gegen genügsames Matching: standardmäßig schnappt sich .* so viel wie möglich, also willst du für den Inhalt eines einzelnen HTML-Tags die genügsame Form .*? stattdessen. Wenn du zwei leicht unterschiedliche Versionen einer Zeichenkette vergleichst, um zu sehen, worauf dein Muster zielen sollte, richtet das Text-Diff-Tool sie aus, sodass der Unterschied offensichtlich ist, bevor du den Ausdruck schreibst.

Wie der Browser Ihren regulären Ausdruck auswertet

Moderne Browser enthalten eine eingebaute ECMAScript-Regex-Engine, die den vollständigen Flag-Satz unterstützt: Groß-/Kleinschreibung-unsensitives Matching (i), Mehrzeilen-Modus (m), dotAll (s), Unicode (u) und den Sticky-Flag (y). Wenn Sie ein Muster in den Tester eingeben, kompiliert die Engine es zu einem internen NFA und wertet es in Echtzeit gegen Ihre Testzeichenkette aus, wobei jede Übereinstimmungsposition und alle Capture-Gruppen gemeldet werden. Backtracking findet lokal auf Ihrer CPU statt: Ein Muster wie (a+)+ auf einer langen nicht-übereinstimmenden Zeichenkette kann sekundenlang laufen, und dieser Stillstand im Browser ist nützliches Feedback, bevor das Muster in Produktionscode eingesetzt wird. Kein Text verlässt die Seite, sodass Sie Log-Samples oder beliebige Eingaben einfügen können, ohne sie über einen Drittanbieter-Server zu leiten.

Die in dieser Anleitung verwendeten Tools

Häufige Fragen

Wird mein Muster oder Testtext an einen Server gesendet?

Nein. Die Regex läuft in einem Web Worker in deinem eigenen Browser, sodass das Muster und der Text, gegen den du testest, im Tab bleiben. Das ist wichtig, weil der Text, den du einfügst, oft ein echtes Log, eine Kundenliste oder eine interne Konfiguration ist, genau die Art von Daten, die du nicht auf dem Server eines anderen haben willst. Öffne das Netzwerk-Panel in deinen Entwicklertools, während du auf Testen drückst, und du wirst keine Anfrage sehen, die deinen Text nach draußen trägt. Es funktioniert auch weiterhin offline, sobald die Seite geladen ist.

Welche Regex-Variante nutzt der Tester?

Er nutzt die in deinen Browser eingebaute Engine für reguläre Ausdrücke von JavaScript, dieselbe, die in Node.js und auf jeder Webseite läuft. Das deckt die übliche Syntax ab: Zeichenklassen, Quantifizierer, Anker, Alternation, nummerierte und benannte Erfassungsgruppen, Lookahead und Lookbehind. Ein paar Funktionen aus anderen Varianten, etwa Rekursion im Perl-Stil oder possessive Quantifizierer, gehören nicht zur JavaScript-Engine, also liegt es meist an diesem Unterschied in der Variante, wenn ein Muster, das du aus einem PHP- oder Python-Projekt kopiert hast, sich anders verhält.

Quellen