Regex Tester für JavaScript
Reguläre Ausdrücke in JavaScript testen – mit Live-Treffern, Gruppen und Ersetzen. Alles läuft lokal — nichts wird hochgeladen.
- Eingang
- Pattern · flags · test text
- Ausgang
- Matches · groups · replaced text
Testtext
Eher planen als matchen? Cron-Ausdruck-Generator öffnen
Reguläre Ausdrücke beim Tippen testen
Dieser Regex Tester führt Ihr Muster mit der JavaScript-Engine Ihres eigenen Browsers aus – derselben, die auch Ihr Node.js- oder Frontend-Code verwendet – und markiert beim Tippen jeden Treffer im Testtext. Daneben erhalten Sie die Liste der Treffer mit Positionen und Erfassungsgruppen, eine Ersetzen-Vorschau und eine zeilenweise Erklärung, was jeder Teil des Musters tut. Muster und Text verlassen die Seite nie.
So testen Sie eine Regex
- Tippen Sie das Muster zwischen die Schrägstriche, ohne die umgebenden
/…/, oder laden Sie eines aus dem Menü Gängige Muster. - Schalten Sie Flags ein oder aus:
g, um jeden Treffer zu finden,i, um Groß-/Kleinschreibung zu ignorieren,m, damit^und$pro Zeile gelten, und so weiter. - Fügen Sie Ihren Testtext ein oder tippen Sie ihn. Treffer werden in abwechselnden Farben markiert, damit benachbarte unterscheidbar bleiben.
- Öffnen Sie Treffer für Position und Gruppen jedes Treffers, Erklärung für eine Aufschlüsselung in Klartext oder Ersetzen, um eine Ersetzung mit
$1,$<name>oder$&in der Vorschau zu sehen.
Flags in regulären Ausdrücken von JavaScript
- g (global)
- Findet jeden Treffer, statt beim ersten aufzuhören. Ersetzen ersetzt dann ebenfalls alle.
- i (ignore case)
- Buchstaben passen unabhängig von Groß-/Kleinschreibung, /cat/i findet also Cat und CAT.
- m (multiline)
- ^ und $ passen am Anfang und Ende jeder Zeile, nicht nur des ganzen Textes.
- s (dotAll)
- Der Punkt passt auch auf Zeilenumbrüche, die er sonst überspringt.
- u (unicode)
- Behandelt das Muster als Unicode-Codepoints: Emojis zählen als ein Zeichen, und \p{…}-Property-Escapes funktionieren. Strengere Syntax.
- v (unicodeSets)
- Der neuere, strengere Nachfolger von u, der Mengenoperationen wie [\p{L}--[a-z]] innerhalb von Klassen ergänzt. Wird nur angezeigt, wenn Ihr Browser ihn unterstützt.
- y (sticky)
- Jeder Treffer muss genau dort beginnen, wo der vorherige endete; nützlich für Tokenizer.
Gruppen, Rückverweise und Ersetzung
Klammern erfassen: (\d{4})-(\d{2}) speichert das Jahr in Gruppe 1 und den Monat in Gruppe 2. Geben Sie einer Gruppe mit (?<year>\d{4}) einen Namen, und sie ist im Code zusätzlich als groups.year und in einer Ersetzung als $<year> verfügbar. Verwenden Sie (?:…), wenn Sie Gruppierung für eine Alternative oder einen Quantor brauchen, aber nichts erfassen wollen.
Innerhalb des Musters passt \1 oder \k<name> auf denselben Text, den eine Gruppe vorher erfasst hat – so findet das Muster für doppelte Wörter in der Bibliothek „the the“ oder „der der“. Lookarounds wie (?=…), (?!…), (?<=…) und (?<!…) prüfen, was davor oder danach kommt, ohne es zu verbrauchen; das Muster für starke Passwörter verwendet vier Lookaheads, um jede Zeichenart zu verlangen.
Im Ersetzungstext fügt $& den ganzen Treffer ein, $1–$99 eine nummerierte Gruppe, $<name> eine benannte Gruppe, $` und $' den Text vor und nach dem Treffer und $$ ein wörtliches Dollarzeichen.
Quantoren: gierig und genügsam
Quantoren geben an, wie oft sich das Element davor wiederholen darf: * null- oder mehrmals, + ein- oder mehrmals, ? null- oder einmal und {2,5} zwei- bis fünfmal. Standardmäßig sind sie gierig und nehmen so viel Text wie möglich, um dann etwas zurückzugeben, wenn der Rest des Musters scheitert. Mit einem Fragezeichen wird einer genügsam (lazy): <.+?> passt auf ein einzelnes HTML-Tag, während <.+> vom ersten < bis zum letzten > der Zeile reicht.
Der Tab Erklärung schlüsselt das für jeden Quantor in Ihrem Muster auf, sodass Sie auf einen Blick sehen, welche Teile sich wiederholen, wie oft und ob gierig oder genügsam. Zeichenklassen wie [A-Za-z0-9_] werden Bereich für Bereich aufgeführt, und Escapes wie \d, \w und \s werden benannt. So lesen Sie ein geerbtes Muster deutlich schneller.
Katastrophales Backtracking – und warum dieser Tester nicht einfriert
Manche Muster brauchen bei Eingaben, auf die sie fast passen, exponentiell viel Zeit. Das klassische Beispiel ist (a+)+$ gegen eine lange Folge von a, gefolgt von einem b: Die Engine probiert jede Möglichkeit, die a zwischen innerer und äußerer Wiederholung aufzuteilen, bevor sie aufgibt. In Produktion ist das ein echtes Denial-of-Service-Risiko, bekannt als ReDoS.
Hier läuft das Matching in einem separaten Hintergrund-Worker mit Zeitlimit. Dauert ein Muster zu lange, wird der Worker gestoppt, und Sie sehen eine Warnung statt eines eingefrorenen Tabs. Die übliche Lösung: verschachtelte Quantoren über dieselben Zeichen entfernen, Alternativen gegenseitig ausschließend machen oder das Muster verankern. Die Ergebnisse sind auf 10.000 Treffer begrenzt.
Eine regex101-Alternative mit Fokus auf JavaScript
Tools wie regex101 unterstützen mehrere Regex-Varianten; dieses unterstützt bewusst genau eine, die ECMAScript-Engine in Ihrem Browser. Was hier passt, passt also auch in JavaScript und TypeScript. PCRE-Funktionen wie possessive Quantoren, atomare Gruppen und Rekursion gibt es in JavaScript nicht, und die Erklärung behandelt ihre Syntax wörtlich. Die Bibliothek deckt Muster ab, nach denen täglich gesucht wird: E-Mail, URL, IPv4- und IPv6-Adressen, ISO-Daten, Hex-Farben, UUIDs, Telefonnummern nach E.164, Slugs, 24-Stunden-Uhrzeiten und starke Passwörter. Jedes ist ein pragmatisches Muster, keine vollständige RFC-Grammatik; validieren Sie kritische Eingaben zusätzlich mit einem eigenen Parser.
Arbeiten Sie mit Zeitplänen statt mit Zeichenketten? Der Cron-Ausdruck-Generator erklärt Cron-Syntax auf dieselbe Weise, wie dieses Tool Regex erklärt.
Häufige Fragen
- Welche Regex-Variante verwendet dieser Tester?
- JavaScript (ECMAScript), ausgeführt von der Engine Ihres eigenen Browsers. Die Ergebnisse entsprechen dem, was RegExp, String.prototype.match und replace in Node.js, Deno, Bun und Browsern derselben Version tun.
- Wie finde ich Treffer über mehrere Zeilen?
- Schalten Sie das Flag m ein, damit ^ und $ an jeder Zeile passen, und das Flag s, wenn der Punkt auch Zeilenumbrüche treffen soll. Ohne s verwenden Sie [\s\S], um jedes Zeichen einschließlich Zeilenumbruch zu treffen.
- Wie verwende ich eine benannte Gruppe in einer Ersetzung?
- Benennen Sie die Gruppe mit (?<name>…) und verweisen Sie im Ersetzungstext mit $<name> darauf. Nummerierte Gruppen sind $1, $2 und so weiter, und $& fügt den ganzen Treffer ein.
- Warum findet meine Regex nur den ersten Treffer?
- Ohne das Flag g hört eine JavaScript-Regex nach dem ersten Treffer auf, und replace ändert nur diesen einen. Schalten Sie g ein, um jedes Vorkommen zu finden und zu ersetzen.
- Was ist katastrophales Backtracking?
- Wenn ein Muster mit verschachtelten oder überlappenden Quantoren wie (a+)+ die Engine bei einer fast passenden Eingabe exponentiell viele Wege ausprobieren lässt. Dieser Tester bricht solche Läufe nach einem Zeitlimit ab, statt die Seite einzufrieren.
- Was ist eine gute Regex für E-Mail-Adressen?
- Ein praktikables Muster ist [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}, das in der Bibliothek enthalten ist. Keine Regex setzt den E-Mail-Standard vollständig um; der einzige echte Test einer Adresse ist eine Bestätigungs-E-Mail an sie.
- Werden meine Testdaten irgendwohin gesendet?
- Nein. Matching, Ersetzen und Erklärung laufen vollständig in Ihrem Browser, Sie können Muster also bedenkenlos an Logs oder Kundendaten testen.