Regex-Tester und -Debugger
Teste JavaScript-Reguläre-Ausdrücke live mit Treffer-Hervorhebung, Erfassungsgruppen und Ersetzungsvorschau.
Regex-Tester und -Debugger wird geladen… Wenn nichts passiert, aktiviere JavaScript.
Reguläre Ausdrücke (regex oder regexp) sind eine formale Sprache zur Beschreibung von Mustern in Text. Die Theorie geht auf den Mathematiker Stephen Cole Kleene zurück, der 1956 die Algebra der regulären Sprachen formalisierte, sowie auf Ken Thompson, der regex in den 1960er- und 1970er-Jahren im QED-Editor und in den ursprünglichen Unix-Werkzeugen grep, sed und awk implementierte. Moderne regex-Engines erweitern die theoretische Grundlage um praktische Funktionen wie Lookaheads, Rückwärtsverweise (Backreferences) und benannte Erfassungsgruppen, was sie zu einem der mächtigsten Textverarbeitungswerkzeuge macht, die in irgendeiner Programmiersprache verfügbar sind.
Beispiele
\b\w+@\w+\.\w+\b on "a@b.com x@y.org"
2 matches: a@b.com, x@y.org
Erfassungsgruppen und Flags (g, i, m) werden live angezeigt, während du tippst.
Häufig gestellte Fragen
Wird meine Eingabe an einen Server gesendet?
Welche regex-Variante verwendet dieses Werkzeug?
Wann sollte ich eine regex statt einfacher String-Methoden verwenden?
Wie unterscheidet sich JavaScript-regex von PCRE (Python, PHP, Perl)?
Welche Flags gibt es und was bewirken sie?
Gibt es eine Begrenzung, wie lang die Testzeichenkette oder das Muster sein darf?
Kann ich damit ein Ersetzungsmuster testen?
Was ist katastrophales Backtracking und wie vermeide ich es?
Was ist der Unterschied zwischen einer erfassenden und einer nicht erfassenden Gruppe?
Was ist ein häufiger Anfängerfehler bei regulären Ausdrücken?
Über Regex-Tester und -Debugger
Reguläre Ausdrücke sind für eine breite Palette realer Aufgaben unverzichtbar. Die Formularvalidierung, das Prüfen, ob eine E-Mail-Adresse, eine Telefonnummer oder eine Postleitzahl dem erwarteten Format entspricht, nutzt fast überall regex. Log-Parser extrahieren mithilfe von Erfassungsgruppen strukturierte Felder aus unstrukturierten Log-Zeilen. Code-Editoren und IDEs verwenden regex zum Suchen und Ersetzen in großen Codebasen. Sicherheitswerkzeuge nutzen regex, um Injection-Muster und das Abfließen sensibler Daten zu erkennen. Datentransformations-Pipelines verwenden regex, um uneinheitliche Formate zu normalisieren. Konfigurationen von Netzwerkgeräten werden mit regex geprüft. Ein regex-Muster interaktiv zu verstehen und zu debuggen ist weitaus schneller, als ein Skript wiederholt auszuführen.
Dieser Tester wertet JavaScript-Reguläre-Ausdrücke in Echtzeit gegen deine Eingabe aus und hebt jeden Treffer hervor, während du tippst. Er listet für jeden Treffer alle Erfassungsgruppen (nummeriert und benannt) auf, sodass du sofort siehst, was jede Gruppe erfasst hat. Ein Ersetzungsmodus erlaubt es dir, eine Ersetzungsvorlage einzugeben und das Ergebnis von String.prototype.replace oder replaceAll vorab anzuzeigen, mit Unterstützung für die Rückwärtsverweise $1, $2 und $<name>. Alles läuft vollständig in der JavaScript-Engine deines Browsers; deine Muster und dein Eingabetext werden niemals an einen Server gesendet.
Bei regex kann man sich notorisch leicht auf subtile Weise irren. Ein einzelner Punkt (.) entspricht in manchen Modi jedem Zeichen, einschließlich Zeilenumbrüchen, nicht nur einem wörtlichen Punkt. Gierige Quantoren (*, +) passen so viel wie möglich und erfassen oft mehr als beabsichtigt; verwende die genügsamen Versionen (*?, +?), um so wenig wie möglich zu passen. Die Anker ^ und $ entsprechen standardmäßig dem Anfang und Ende der gesamten Zeichenkette; füge das Multiline-Flag (m) hinzu, wenn sie an Zeilengrenzen passen sollen. Katastrophales Backtracking, bei dem ein schlecht geschriebener regex bei einer feindseligen Eingabe eine exponentielle Übereinstimmungszeit verursacht, ist ein reales Denial-of-Service-Risiko in Webanwendungen, die von Nutzern bereitgestellte Muster auf von Nutzern bereitgestellten Text anwenden.
Von der Theorie formaler Sprachen zu grep
Das Konzept der regulären Ausdrücke stammt aus der theoretischen Informatik. 1956 veröffentlichte der Mathematiker Stephen Cole Kleene eine Arbeit, die 'reguläre Ereignisse' beschrieb, Mengen von Zeichenketten, die sich durch einen endlichen Automaten beschreiben lassen, und führte die algebraische Notation ein, aus der die regex-Syntax werden sollte. Der Stern-Operator (*), der Kleene-Stern genannt wird, ist nach ihm benannt. Zu diesem Zeitpunkt waren reguläre Ausdrücke rein eine mathematische Abstraktion ohne Bezug zur Computerpraxis.
Der Sprung von der Theorie zum Werkzeug kam 1968, als Ken Thompson die regex-Suche im Texteditor QED und dann im Unix-Werkzeug grep implementierte (dessen Name für 'globally search a regular expression and print' steht). Thompsons entscheidende Neuerung war ein effizienter Algorithmus, der einen regulären Ausdruck in einen nichtdeterministischen endlichen Automaten (NFA) umwandelte und ihn simulierte, was eine Übereinstimmung in linearer Zeit ohne katastrophales Backtracking garantierte. Viele moderne regex-Engines gaben Thompsons NFA-Ansatz zugunsten von Backtracking-Engines auf, die mehr Funktionen unterstützen (wie Rückwärtsverweise), aber im schlimmsten Fall exponentielles Verhalten zeigen können.
Heute werden reguläre Ausdrücke nativ in praktisch jeder Programmiersprache und jedem Texteditor unterstützt. Dennoch hat sich die Syntax in Dutzende inkompatibler Varianten aufgesplittert, POSIX BRE, POSIX ERE, PCRE, .NET, Java, Python, JavaScript, Ruby, jede mit subtilen Unterschieden in Syntax und Semantik. Eine für eine Sprache geschriebene regex funktioniert oft auch in einer anderen, aber Grenzfälle gibt es zuhauf. Diese Fragmentierung ist der Grund, warum es immer empfohlen wird, ein Muster in der konkreten Engine zu testen, die du tatsächlich verwenden wirst, bevor du es in der Produktion einsetzt.