Regex Tester für JavaScript

Gib einen regulären Ausdruck ein und sieh jeden Treffer schon beim Tippen hervorgehoben, mit Capture-Gruppen, Ersetzungsvorschau und einer Bibliothek fertiger Muster.

Läuft im BrowserOhne AnmeldungKein Upload

Hervorgehobene Treffer

    
Verwende $1, $<name>, $& (gesamter Treffer)
Trefferdetails
#IndexTrefferGruppen
Regex-Spickzettel
.Beliebiges Zeichen außer Zeilenumbruch (mit s jedes)
\d \w \sZiffer, Wortzeichen, Leerraum
\D \W \SKeine Ziffer, kein Wortzeichen, kein Leerraum
[abc] [^abc]Eines von / keines von a, b, c
[a-z0-9]Zeichenbereich
\p{L} \p{N}Unicode-Buchstabe / -Zahl (benötigt u)
^ $Anfang / Ende der Eingabe (mit m der Zeile)
\b \BWortgrenze / keine Wortgrenze
* + ?0 oder mehr, 1 oder mehr, 0 oder 1
{n} {n,} {n,m}Genau n, mindestens n, zwischen n und m
*? +? ??Lazy (so wenig wie möglich)
a|ba oder b
(…)Capture-Gruppe, referenziert als $1
(?<name>…)Benannte Gruppe, $<name>
(?:…)Nicht erfassende Gruppe
\1 \k<name>Rückverweis
(?=…) (?!…)Lookahead / negativer Lookahead
(?<=…) (?<!…)Lookbehind / negativer Lookbehind
\. \* \\Escapte Literalzeichen
\n \t \rZeilenumbruch, Tab, Wagenrücklauf
\uFFFFUnicode-Codeeinheit
\u{1F600}Codepoint (benötigt u)
$&Gesamter Treffer in einer Ersetzung
$` $'Text vor / nach dem Treffer

Anleitung: Regex Tester

  1. Gib dein Muster zwischen den Schrägstrichen ein, ohne die umschließenden /.
  2. Schalte Flags wie g (alle Treffer), i (Groß-/Kleinschreibung ignorieren) und m (mehrzeilig) um.
  3. Füge deinen Testtext ein. Treffer werden rechts hervorgehoben und darunter mit Index und Capture-Gruppen aufgelistet.
  4. Aktiviere Ersetzen und gib eine Ersetzung wie $1 oder $<name> ein, um String.replace vorab zu sehen.
  5. Wähle ein Muster aus der Musterbibliothek, um mit einer getesteten Regex für E-Mail, URL, IP oder Datum zu starten.

Reguläre Ausdrücke in JavaScript

Dieser Tester verwendet die RegExp-Engine deines Browsers, die Ergebnisse entsprechen also exakt dem, was String.match, matchAll, replace und RegExp.exec in JavaScript und Node.js liefern. Das schließt moderne Syntax ein: benannte Gruppen (?<name>…), Lookbehind (?<=…), Unicode-Property-Escapes wie \p{L} mit dem Flag u und Trefferindizes mit dem Flag d.

Was die Flags bewirken

FlagNameWirkung
gglobalFindet jeden Treffer, statt beim ersten aufzuhören.
iignoreCaseBuchstaben passen unabhängig von Groß-/Kleinschreibung.
mmultiline^ und $ passen am Anfang und Ende jeder Zeile.
sdotAll. passt auch auf Zeilenumbrüche.
uunicodeBehandelt das Muster als Codepoints; aktiviert \p{…} und \u{…}.
ystickyMatcht nur an der aktuellen Position lastIndex.
dhasIndicesLiefert Start- und Endposition für jede Capture-Gruppe.

Schutz vor Catastrophic Backtracking

Muster mit verschachtelten Quantoren, etwa (a+)+$ oder (\w|\d)*x, können bei fast passenden Eingaben exponentiell lange brauchen. Auf einer normalen Webseite friert das den Tab ein. Hier läuft jedes Matching in einem Web Worker im Hintergrund, der nach einer Sekunde gestoppt wird, und du bekommst eine klare Warnung statt eines hängenden Browsers. Dasselbe Muster könnte im Produktionscode eine ReDoS-Schwachstelle sein, behandle die Warnung also als Bug, den du beheben solltest.

Tipps für bessere Regexe

  • Verankere Muster mit ^ und $, wenn du ganze Werte validierst, sonst genügt ein Treffer irgendwo im String.
  • Bevorzuge spezifische Klassen wie [^"]* statt .*; sie sind schneller und vermeiden zu gierige Treffer.
  • Verwende nicht erfassende Gruppen (?:…), wenn du den erfassten Wert nicht brauchst.
  • Benenne deine Gruppen. match.groups.year liest sich leichter als match[1].

Häufig gestellte Fragen

Welche Regex-Variante verwendet dieser Tester?
JavaScript (ECMAScript), über das eingebaute RegExp deines Browsers. Der Großteil der Syntax ist mit PCRE, Python und Java identisch, aber Features wie possessive Quantoren, atomare Gruppen und Inline-Modifikatoren wie (?i) gibt es in JavaScript nicht.
Warum findet mein Muster nur einen Treffer?
Ohne das Flag g (global) hört JavaScript nach dem ersten Treffer auf. Aktiviere g, um jedes Vorkommen zu finden.
Wie referenziere ich Gruppen in der Ersetzung?
Verwende $1, $2 … für nummerierte Gruppen, $<name> für benannte Gruppen, $& für den gesamten Treffer und $$ für ein wörtliches Dollarzeichen.
Warum hat der Tester mit einem Timeout abgebrochen?
Das Muster hat bei deiner Eingabe länger als eine Sekunde gebraucht, was fast immer auf Catastrophic Backtracking hindeutet. Suche nach verschachtelten Quantoren wie (x+)+ oder überlappenden Alternativen wie (a|a)* und schreibe sie so um, dass jedes Zeichen nur auf eine Weise gematcht werden kann.
Werden meine Testdaten irgendwohin gesendet?
Nein. Das Matching läuft lokal in einem Web Worker in deinem Browser. Muster und Text werden nur in deinem eigenen Browser gespeichert, damit sie beim nächsten Besuch noch da sind.

Ähnliche Tools