Über das Tool „Regex-Tester“
Ein regulärer Ausdruck (Regex) beschreibt ein Textmuster – zum Beispiel „vier Ziffern, ein Bindestrich, dann zwei Ziffern“ – und dient zum Suchen, Prüfen und Umschreiben von Text in Code, Editoren, Kommandozeilen-Tools und Tabellenkalkulationen. Ein Muster so hinzubekommen, dass es genau das trifft, was Sie meinen, ist viel einfacher, wenn Sie die Treffer sofort sehen.
Dieser Tester verwendet die JavaScript-Regex-Engine Ihres Browsers. Die Ergebnisse sind also dieselben, die RegExp, match und replace in JavaScript und Node.js liefern. Treffer werden während der Eingabe hervorgehoben, jeder Treffer wird mit Position und Erfassungsgruppen aufgelistet, und der Modus „Ersetzen“ zeigt, was eine Ersetzung ergibt.
Muster laufen in einem Hintergrund-Worker mit Zeitlimit, sodass ein Muster mit katastrophalem Backtracking die Seite nicht einfrieren kann. Ihr Muster und Ihr Text bleiben in Ihrem Browser.
Anleitung
- Geben Sie unter „Regulärer Ausdruck“ ein Muster ohne die umgebenden Schrägstriche ein – oder klicken Sie auf eines der Beispiele.
- Schalten Sie Flags ein oder aus: g, i, m, s, u und y, dazu d und v, wenn Ihr Browser sie unterstützt.
- Fügen Sie den zu durchsuchenden Text unter „Testtext“ ein. Treffer werden unter „Hervorgehobene Treffer“ markiert und unter „Treffer im Detail“ mit Index, Länge und Gruppen aufgelistet.
- Wählen Sie unter „Modus“ die Option „Ersetzen“ und geben Sie eine Ersetzung wie $<day>/$<month>/$<year> ein, um das „Ergebnis nach der Ersetzung“ zu sehen. Klicken Sie dann auf „Ergebnis kopieren“.
- Schlagen Sie die Syntax in der Kurzreferenz unter dem Tester nach, und beginnen Sie mit „Leeren“ von vorn.
Funktionen
- Live-Hervorhebung und Treffer im Detail: Jeder Treffer wird im Text hervorgehoben und mit Index, Länge sowie nummerierten und benannten Erfassungsgruppen aufgelistet. Leere Treffer (Länge null) erscheinen als schmale Markierungen, und mit dem Flag d werden Anfang und Ende jeder Gruppe angegeben.
- Vorschau der Ersetzung: Testen Sie eine Ersetzung mit der Syntax von JavaScript: $1 und $<name> für Gruppen, $& für den ganzen Treffer, $` und $' für den Text davor und danach und $$ für ein Dollarzeichen.
- Die echte JavaScript-Engine: Die Suche verwendet die RegExp-Implementierung des Browsers. Verhalten und Syntaxfehler sind also genau die, die auch Ihr JavaScript-Code sieht.
- Schutz vor außer Kontrolle geratenen Mustern: Jeder Lauf findet in einem Web Worker statt und wird nach 1,5 Sekunden abgebrochen. Statt eines eingefrorenen Tabs erhalten Sie eine Erklärung zu katastrophalem Backtracking.
- Beispiele und Kurzreferenz: Laden Sie einfache Muster für E-Mail-ähnlichen Text, ISO-Daten, Hex-Farben und wiederholte Wörter, und schlagen Sie gängige Tokens und Ersetzungscodes auf einen Blick nach.
Beispiele
Datumsangaben umformatieren
Laden Sie das Beispiel „ISO-Datum“ und wechseln Sie zu „Ersetzen“: Das Muster erfasst Jahr, Monat und Tag als benannte Gruppen, und die Ersetzung $<day>/$<month>/$<year> macht aus 2024-03-15 den Wert 15/03/2024.
Doppelte Wörter finden
Das Muster \b(\w+)\s+\1\b mit dem Flag i findet "is is" und "the the" – auch wenn das wiederholte Wort in der nächsten Zeile weitergeht. Eine Ersetzung durch $1 entfernt die Dopplung.
Farben aus CSS herausziehen
Mit #(?:[0-9a-f]{6}|[0-9a-f]{3})\b und den Flags g und i zeigt die Trefferliste jede drei- und sechsstellige Hex-Farbe in einem Stylesheet, während ungültige Werte wie #12345G übersprungen werden.
Ein langsames Muster untersuchen
Das Beispiel „Langsames Muster (Demo)“ ^(a+)+$ wird auf einer langen Reihe von "a" mit einem "b" am Ende nach 1,5 Sekunden mit einer Warnung abgebrochen. Das Problem ist das verschachtelte +; ^a+$ findet denselben Text sofort.
Einschränkungen und Hinweise
- Unterstützt wird nur die Regex-Syntax von JavaScript. Funktionen anderer Varianten wie possessive Quantifizierer, atomare Gruppen, Rekursion oder \A und \Z stehen nicht zur Verfügung, und welche Syntax genau unterstützt wird, hängt von Ihrem Browser ab.
- Der Testtext ist auf 200.000 Zeichen begrenzt. Bis zu 5.000 Treffer werden aufgelistet und hervorgehoben; die Trefferzahl und der Modus „Ersetzen“ berücksichtigen trotzdem alle Treffer.
- Jeder Lauf wird nach 1,5 Sekunden abgebrochen. Ein berechtigtes, aber sehr aufwendiges Muster auf langem Text kann daher ebenfalls abgebrochen werden.
- Wie in JavaScript wird ohne das Flag g nur der erste Treffer gefunden und ersetzt.
- Die Beispielmuster sind bewusst einfach gehalten, zum Lernen und für schnelle Suchen. Sie sind keine vollständigen Validatoren – das Datumsbeispiel akzeptiert zum Beispiel 2024-02-30.
- Index und Länge werden wie in JavaScript in UTF-16-Codeeinheiten gezählt, ein Emoji zählt also als zwei Zeichen.
Häufige Fragen
Welche Regex-Variante verwendet dieser Tester?
JavaScript (ECMAScript), ausgeführt von der Engine Ihres Browsers. Muster, die hier funktionieren, funktionieren in JavaScript- und Node.js-Code genauso. Muster für Python, PCRE (PHP) und Java sind oft ähnlich, unterscheiden sich aber in Details wie der Unterstützung von Lookbehind, Inline-Flags und der Syntax benannter Gruppen.
Warum findet mein Muster nur einen Treffer?
Schalten Sie das Flag g (global) ein. Ohne dieses Flag hört JavaScript nach dem ersten Treffer auf – beim Suchen wie beim Ersetzen.
Was ist katastrophales Backtracking?
Muster mit verschachtelten oder sich überschneidenden Quantifizierern wie (a+)+ oder (\w|\d)* können bei Text, der beinahe passt, exponentiell viele Wege ausprobieren. Die Engine läuft dann unter Umständen minutenlang. Ein genaueres Muster – zum Beispiel ^a+$ statt ^(a+)+$ – behebt das meist.
Wie verwende ich eine erfasste Gruppe in der Ersetzung?
Schreiben Sie $1, $2 usw. für nummerierte Gruppen oder $<name> für eine Gruppe, die als (?<name>…) geschrieben ist. $& fügt den ganzen Treffer ein, $$ ein wörtliches Dollarzeichen.
Muss ich Schrägstriche maskieren?
In diesem Tester nicht: Die Schrägstriche um das Feld sind nur Dekoration, und das Muster wird direkt an new RegExp() übergeben. In einem JavaScript-Regex-Literal wie /a\/b/ muss ein Schrägstrich dagegen als Escape-Sequenz geschrieben werden.
Wird mein Text an einen Server gesendet?
Nein. Die Suche läuft in einem Web Worker auf dieser Seite, und weder das Muster noch der Text werden über das Netzwerk gesendet.