ToolActToolAct

Regex-Testtool

Reguläre Ausdrücke in Echtzeit testen und debuggen, Übereinstimmungen hervorheben und Code generieren

Regulärer Ausdruck
//g
Flags
gglobal
iignore case
mmultiline
sdotAll
uunicode
Häufige Beispiele
Test-Text
Übereinstimmungen0 Übereinstimmungen
Keine Übereinstimmungen

Was ist ein regulärer Ausdruck?

Das Regex-Werkzeug hilft, reguläre Ausdrücke zu schreiben, zu testen und zu verstehen. Reguläre Ausdrücke beschreiben Textmuster für Suche, Extraktion, Validierung und Ersetzung, etwa E-Mail-ähnliche Strings, Logfelder, URLs, IDs oder wiederkehrende Formatierungen. Ein Tester macht Treffer, Gruppen, Flags und Grenzfälle sichtbar, bevor ein Muster in Code, Datenpipeline oder Formularvalidierung landet. Regex ist mächtig, aber leicht zu überschätzen: Ein Muster kann zu viel oder zu wenig treffen, bei großen Eingaben langsam werden oder internationale Zeichen nicht korrekt berücksichtigen. Für komplexe Parser, HTML-Strukturen oder sicherheitskritische Validierung ist oft eine spezialisierte Bibliothek robuster.

So verwenden Sie es

So verwenden Sie es

  1. Geben Sie Ihr Regex-Muster im linken Eingabefeld ein
  2. Wählen Sie die gewünschten Flags (z. B. g für global, i für Groß-/Kleinschreibung ignorieren)
  3. Geben Sie den Testtext auf der rechten Seite ein
  4. Markierte Treffer und Details ansehen

Regex-Tipps

  • Testen Sie Muster mit passenden und nicht passenden Beispielen, damit zu breite Ausdrücke leichter erkannt werden.
  • Seien Sie vorsichtig mit geschachtelten Quantoren bei langem Text – einige Muster können durch übermäßiges Backtracking langsam werden.

Anwendungsfälle

JavaScript-Reguläre Ausdrücke live testenGeben Sie ein Muster ein, wählen Sie die Flags g, i, m, s und u, und testen Sie gegen Beispieltext mit hervorgehobenen Treffern. Ungültige Regex-Syntax wird sofort abgefangen, und globale Treffer mit Länge Null werden behandelt, ohne die Schleife zu blockieren. Das Echtzeit-Feedback macht iteratives Anpassen schneller als das Ausführen eines Skripts in der Konsole oder das Neustarten eines Editors bei jeder Musteränderung.
Trefferpositionen und benannte Gruppen inspizierenJeder Treffer listet seinen Text, Start- und End-Offsets sowie benannte Erfassungsgruppen, sofern vorhanden. Das ist nützlich bei der Verfeinerung von Extraktionsmustern für Logs, Formularvalidierung, Importregeln oder Datenbereinigungsskripte. Der sichtbare Offset ermöglicht es, dasselbe Muster in eine breitere Pipeline einzufügen, die bereits Zeichenpositionen in der Quelldatei nachverfolgt.
Ein funktionierendes Muster in Code-Snippets umwandelnWenden Sie integrierte Beispiele für E-Mails, URLs, IPs, Datumsangaben, Farben, chinesischen Text, Zahlen und Whitespace an, und generieren Sie kopierbare Snippets für JavaScript, Python, Java, PHP oder Go mit den gewählten Flags, wo die jeweilige Sprache sie unterstützt. Die generierten Snippets enthalten das literal Muster und den passenden Flag-Satz, sodass das Laufzeitverhalten mit dem auf der Seite getesteten übereinstimmt.
Katastrophales Backtracking und unkontrollierte Treffer debuggenFügen Sie einen langen oder adversären String in den Tester ein, um verschachtelte Quantoren wie (a+)+ oder .*foo.* aufzudecken, die die Engine einfrieren. Beobachten Sie die Trefferanzahl und die Offsets pro Treffer — wenn die Iteration stockt oder der Speicher ansteigt, vereinfachen Sie mit atomaren Gruppen, possessiven Quantoren oder strafferen Ankern. Ein gutes Muster überlebt die schlechteste Eingabe ohne exponentiellen Aufblähung.
Gierige vs. träge Quantoren, Lookbehind und \p{L} vergleichenNutzen Sie den Tester, um zu sehen, wie gierige Quantoren (.*) und träge Quantoren (.*?) unterschiedliche Präfixe im selben Text wählen, und prüfen Sie die Lookbehind-Unterstützung (?<=), die in JavaScript und PCRE verfügbar ist, aber nicht in jeder älteren Engine. Schalten Sie das u-Flag ein, um Unicode-Eigenschaftsklassen wie \p{L} (beliebiger Buchstabe) und \p{Sc} (Währungssymbol) zu nutzen, sodass buchstabenbasierte Muster über lateinische, kyrillische und CJK-Schriften hinweg korrekt bleiben.

Technisches Prinzip

Der Tester wird von der ECMAScript-RegExp-Engine angetrieben, die in der Sprachspezifikation definiert ist. ECMAScript-Regex ist eine Backtracking-NFA-Implementierung: Die Engine probiert jede Alternative von links nach rechts und setzt zurück, wenn ein Quantor scheitert, was Lookarounds und Backreferences ermöglicht, aber auch katastrophales Backtracking bei adversativen Eingaben erzeugen kann. Die sechs erkannten Flags sind g (global), i (Groß-/Kleinschreibung ignorieren), m (Mehrzeilenmodus, Anker pro Zeile), s (dotAll, '.' passt auf Newline), u (Unicode-Modus) und y (sticky, Verankerung an lastIndex). Die Match-Semantik ändert sich stark je nach Flag. Unter /u behandelt die Engine das Muster als eine Sequenz von Unicode-Codepoints statt UTF-16-Codunits, sodass Surrogate-Paare als ein Zeichen matchen und Unicode-Eigenschaftsklassen wie \p{L} (beliebiger Buchstabe), \p{Sc} (Währungssymbol) und \p{Script=Han} verfügbar werden. Benannte Erfassungsgruppen (?<name>...) und Lookbehind (?<=...) sind Teil von ES2018 und verfügbar in Chromium 64+, Firefox 78+ und Safari 16.4+, aber PCRE-only-Features wie atomare Gruppen (?>...) und possessive Quantoren (a++) sind noch nicht in der Spezifikation. Das größte Produktionsrisiko ist ReDoS — ein Muster wie (a+)+b auf der Eingabe 'aaaaaaaaaaaaaaaa!' erkundet eine exponentielle Anzahl von Pfaden, weil zwei geschachtelte Quantoren dieselbe Zeichenfolge auf viele Arten aufteilen können. Gegenmaßnahmen sind gut bekannt: Vermeiden Sie geschachtelte Quantoren über dieselbe Zeichenklasse, verankern Sie mit ^ und $ wo möglich, bevorzugen Sie atomare Gruppen wenn die Engine sie unterstützt, oder wechseln Sie zu einer linearzeitigen Engine wie Go's RE2 (das Backreferences und Lookbehind gegen garantierte O(n)-Matchzeit eintauscht). Für nicht vertrauenswürdige Eingaben, die serverseitig validiert werden sollen, ist RE2 oder ein handgeschriebener Parser fast immer die sicherere Wahl.

  • Engine: ECMAScript RegExp ist ein Backtracking-NFA, kein DFA; das ermöglicht Lookarounds und Backreferences, aber auch katastrophales Backtracking.
  • Flags: g (global), i (Groß-/Kleinschreibung ignorieren), m (^/$ pro Zeile), s (dotAll, '.' passt auf \n), u (Unicode-Modus, Surrogate-aware), y (sticky, verankert an lastIndex).
  • Unicode-Modus: /u aktiviert Codepoint-Matching plus \p{L} (Buchstabe), \p{Sc} (Währung), \p{Script=Han}; ohne /u verfehlt [a-zA-Z]+ jedes nicht-lateinische Wort.
  • Verfügbarkeit moderner Syntax: Benannte Erfassungen (?<n>...) und Lookbehind (?<=...) verfügbar in Chromium 64+, Firefox 78+, Safari 16.4+; atomare Gruppen (?>...) und possessive Quantoren (a++) sind nicht in ECMAScript.
  • ReDoS: Geschachtelte Quantoren über dieselbe Klasse wie (a+)+b explodieren exponentiell; verschärfen mit Ankern, atomaren Gruppen, oder Migration zu RE2 / re2-wasm für nicht vertrauenswürdige Eingaben.
  • Komplexitätsuntergrenze: Literal-verankerte Muster über einem festen Alphabet laufen in O(n); Backreferences und unbegrenzte Lookarounds treiben den Worst Case auf exponentiell, daher vor dem Einsatz auf adversativen Eingaben benchmarken.

Beispiele

E-Mail-Adresse abgleichen

Muster: ^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
Flags:   gi

Eingabe: contact: alice@example.com, bob_2024@mail.co.uk, invalid@.com
Treffer: alice@example.com, bob_2024@mail.co.uk  (2 Treffer)

IPv4-Adressen aus einem Log extrahieren

Muster: \b(?:\d{1,3}\.){3}\d{1,3}\b
Flags:   g

Eingabe: 2026-06-15 ERROR client 192.168.1.42 connect failed (peer 10.0.0.1)
Treffer: 192.168.1.42, 10.0.0.1

Datumsbestandteile mit benannten Gruppen erfassen

Muster: (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
Flags:   g

Eingabe: Sprint window: 2026-09-01 to 2026-09-15
Gruppen: {year:'2026', month:'09', day:'01'}, {year:'2026', month:'09', day:'15'}

Gieriger vs. fauler Quantor

Eingabe: <b>hello</b> <i>world</i>

.*  (gierig) -> trifft die ganze Zeile: <b>hello</b> <i>world</i>
.*? (faul)   -> nur erster Treffer: <b>hello</b>

Faul ist meist das, was du beim Scrapen zwischen Tags möchtest.

Unicode-fähige Buchstabenklasse

Muster: \p{L}+
Flags:   gu

Eingabe: Hello, 北京! Café Москва
Treffer: Hello, 北京, Café, Россия

Ohne das u-Flag und \p{L} würde [a-zA-Z]+ jedes nicht-lateinische Wort verfehlen.

FAQ

Welchen Regex-Dialekt nutzt der Tester?

Die JavaScript-Regex-Engine (ECMAScript). Sie ähnelt PCRE bei gängigen Funktionen, unterscheidet sich aber in Randfällen: keine possessiven Quantifizierer, keine Rekursion, Lookbehind-Unterstützung erfordert einen aktuellen Browser, benannte Gruppen nutzen (?<name>...). Für Python (re/regex), Java, .NET oder PCRE kann das Verhalten beim selben Pattern abweichen – teste auch in der tatsächlichen Umgebung.

Welche Flags werden unterstützt?

g (global, alle Treffer finden), i (case-insensitive), m (multiline, ^ und $ matchen Zeilengrenzen), s (dotall, . matcht Newline), u (Unicode), y (sticky), d (hasIndices). Wähle sie über die Toggle-Reihe; die Seite zeigt, was jedes Flag in deinem Testtext ändert.

Warum matcht mein Pattern weniger Treffer als erwartet?

Ohne g-Flag liefert regex.exec einen Treffer. Ohne m matchen ^ und $ nur den absoluten Anfang/Ende des Inputs. Ohne u matchen Surrogate-Pair-Zeichen (Emoji) als zwei Hälften. Die meisten „warum funktioniert das nicht“-Fälle sind fehlende Flags.

Wie matche ich Emoji- und CJK-Zeichen?

Nutze das u-Flag für korrekte Unicode-Behandlung. Verwende \p{...}-Zeichenklassen (\p{Letter}, \p{Script=Han}, \p{Emoji}), um nach Unicode-Eigenschaft zu matchen. Ohne u matcht [a-zA-Z] keine Akzentzeichen – entweder erweitern auf [a-zA-ZÀ-ÿ] oder \p{L} verwenden.

Kann ich aus einem Pattern Code generieren?

Die meisten Builds exportieren das Pattern als JavaScript-, Python-, PHP-, Ruby-, Go- oder Java-Syntax mit passendem Escaping. Vorsicht: Dasselbe Pattern kann sich zwischen Engines unterschiedlich verhalten (Greediness-Defaults, Zeichenklassen-Verhalten, Lookaround-Unterstützung). Teste immer in der Zielsprache.

Was ist der Unterschied zwischen greedy und lazy Quantifizierern?

Greedy (* + ?) matcht so viel wie möglich und backtrackt bei Bedarf. Lazy (*? +? ??) matcht so wenig wie möglich. Für „alles zwischen A und B extrahieren“ schießt greedy .* über das Ziel hinaus, wenn mehrere B existieren; lazy .*? stoppt beim ersten B. Wähle bei Inhalts-Extraktion standardmäßig lazy.

Werden meine Regex oder mein Testtext hochgeladen?

Nein. Das Matching läuft in deinem Browser über die native Regex-Engine von JavaScript. Patterns und Eingaben werden nicht übertragen.