Regex-Testtool
Reguläre Ausdrücke in Echtzeit testen und debuggen, Übereinstimmungen hervorheben und Code generieren
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
- Geben Sie Ihr Regex-Muster im linken Eingabefeld ein
- Wählen Sie die gewünschten Flags (z. B. g für global, i für Groß-/Kleinschreibung ignorieren)
- Geben Sie den Testtext auf der rechten Seite ein
- 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
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.1Datumsbestandteile 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.