Regex-Tester: Reguläre Ausdrücke online testen und debuggen

Muster eingeben, Teststring einfügen, Treffer sofort hervorgehoben sehen. Erfassungsgruppen, Flags, Fehlermeldungen, alles live während du tippst. Verwendet die JavaScript-Regex-Engine (dieselbe wie dein Browser und Node.js). Nichts verlässt deinen Browser.

tools.regexTester.pattern
tools.regexTester.enterPattern
//

tools.regexTester.flags

tools.regexTester.testString
tools.regexTester.enterTestString
Testen und debuggen Sie Ihre regulären Ausdrücke

Character Classes

  • . Any character
  • \d Digit (0-9)
  • \w Word character
  • \s Whitespace

Quantifiers

  • * 0 or more
  • + 1 or more
  • ? 0 or 1
  • {n,m} n to m times

Anchors

  • ^ Start of line
  • $ End of line
  • \b Word boundary
  • \B Non-word boundary

Reguläre Ausdrücke in 90 Sekunden

Eine Regex ist eine Minisprache zur Beschreibung von Textmustern. Das Muster \d{3}-\d{4} passt zu Telefonnummern wie "555-1234". Das Muster ^From:.+$ passt zu E-Mail-Kopfzeilen, die mit "From:" beginnen. Einfaches Konzept, aber die Syntax wird schnell dicht.

JavaScript verwendet die ECMAScript-Regex-Variante (definiert in ECMA-262). Hauptunterschiede zu anderen Varianten: kein Lookbehind in älteren Engines (hinzugefügt in ES2018), keine possessiven Quantoren, keine atomaren Gruppen. Wenn du eine Regex aus Python oder PCRE portierst, achte auf diese Lücken.

Der häufigste Fehler den ich sehe: vergessen, dass . standardmäßig nicht mit Zeilenumbrüchen übereinstimmt. Wenn dein Teststring Zeilenumbrüche enthält und dein Muster .* verwendet, bekommst du unerwartete Teiltreffer. Füge das s-Flag (dotAll) hinzu oder verwende stattdessen [\s\S]*.

Leistungsfalle: Verschachtelte Quantifizierer wie (a+)+ oder (.*a){20} können zu katastrophalem Backtracking führen. Die Engine versucht exponentiell viele Pfade. Eine 30-Zeichen-Eingabe kann deinen Browser minutenlang blockieren. Dieses Tool läuft in deinem Browser, also friert ein schlechtes Muster nur diesen Tab ein, nicht einen Produktionsserver. Zuerst hier testen.

Anleitung

  1. Regex-Muster eingeben, ohne Begrenzer (nur das Muster, nicht /pattern/).
  2. Flags setzen: g (alle Treffer), i (Groß-/Kleinschreibung ignorieren), m (mehrzeilig), s (Punkt passt auf Zeilenumbruch).
  3. Teststring einfügen. Treffer werden in Echtzeit hervorgehoben.
  4. Erfassungsgruppen unten prüfen. Jede () Gruppe zeigt ihren Inhalt separat.

Wann du das brauchst

Benutzereingabeformate validieren

E-Mail, Telefonnummer, Postleitzahl, Kreditkarte. Alle haben Muster. Regex hier erstellen und testen, bevor du sie in deinen Validierungscode einfügst.

Daten aus Logdateien extrahieren

Serverprotokolle, CSV-Dateien, API-Antworten. Wenn du Zeitstempel, IPs oder Fehlercodes aus unstrukturiertem Text extrahieren musst, baust du hier ein Muster mit Erfassungsgruppen, testest gegen eine Beispiel-Logzeile, und übernimmst es dann ins Skript.

Suchen und Ersetzen in Code-Editoren

VS Code, IntelliJ, Sublime unterstützen alle Regex-Suchen-und-Ersetzen. Muster hier mit Testfällen erstellen, dann in den Editor einfügen. Beim Refactoring besonders nützlich.

Eine Regex debuggen die nicht matcht

Du hast ein Muster geschrieben, es funktioniert für manche Eingaben aber nicht für andere. Die fehlschlagende Eingabe hier einfügen und genau sehen wo der Treffer abbricht. Meist ist es ein fehlender Escape (\. vs .), greedy vs lazy (.* vs .*?), oder ein fehlendes Flag.

Häufige Fallstricke

1.

Sonderzeichen escapen

In Regex haben . * + ? ^ $ { } [ ] ( ) | \ alle eine besondere Bedeutung. Um einen wörtlichen Punkt zu finden, verwende \. und nicht nur einen Punkt.

2.

Greedy vs lazy: .* vs .*?

.* greift so viel wie möglich (gierig), .*? greift so wenig wie möglich (faul). Im Zweifelsfall mit .*? anfangen und bei Bedarf Spezifität hinzufügen.

3.

Anker mit mehrzeiligem Flag

Ohne m-Flag passt ^ nur auf den Anfang des gesamten Strings und $ nur auf das Ende. Mit m-Flag passen sie auf Anfang und Ende jeder Zeile. Wenn du mehrzeiligen Text verarbeitest und ^ verwendest, brauchst du wahrscheinlich das m-Flag.

4.

Katastrophales Backtracking vermeiden

Muster wie (a+)+ oder (x+x+)+y können bei nicht-passenden Eingaben exponentielle Zeit benötigen. Niemals Quantoren auf sich überschneidenden Zeichenklassen verschachteln.

Beispiele

Datumskomponenten extrahieren

Jahr, Monat, Tag aus ISO-Datumsformat mit nummerierten Gruppen erfassen.

Input

(\d{4})-(\d{2})-(\d{2})

Output

Eingabe "2024-03-15" ergibt Gruppe 1: "2024", Gruppe 2: "03", Gruppe 3: "15"

E-Mail-Muster abgleichen

Ein vereinfachtes E-Mail-Muster (nicht RFC 5322 konform, aber filtert offensichtliche Nicht-E-Mails).

Input

[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}

Funktionen

  • Ergebnisse aktualisieren sich beim Tippen, kein Absende-Button
  • Alle JavaScript-Flags: g, i, m, s, u, v, y
  • Nummerierte Erfassungsgruppen-Anzeige
  • Syntaxfehler werden mit beschreibenden Meldungen hervorgehoben
  • Trefferzähler und Positionsanzeigen
  • Läuft 100% im Browser, Daten werden nirgendwohin gesendet

Häufige Fragen

Warum funktioniert meine Regex in Python aber nicht hier?

Unterschiedliche Regex-Varianten. Python verwendet PCRE-ähnliche Syntax mit Funktionen die JavaScript fehlen: Lookbehind (hinzugefügt in ES2018, nicht in älteren Browsern), atomare Gruppen, possessive Quantoren (a++), Verbose-Modus (x-Flag). Häufigstes Problem: Pythons re.DOTALL ist JavaScripts s-Flag.

Wie matche ich über mehrere Zeilen hinweg?

Zwei Optionen. Erstens: s-Flag hinzufügen, dann passt . auch auf Zeilenumbruchzeichen. Zweitens: [\s\S] statt . verwenden, passt auf jedes Zeichen einschließlich Zeilenumbrüche ohne s-Flag. Für zeilenweises Matching das m-Flag verwenden, damit ^ und $ auf Zeilengrenzen passen.

Was ist der Unterschied zwischen (?: ) und ( )?

( ) ist eine Erfassungsgruppe, die den passenden Text für spätere Verwendung speichert (Rückverweise, Extraktion). (?: ) ist eine nicht-erfassende Gruppe, die das Muster gruppiert aber nichts erfasst. (?: ) verwenden wenn du Gruppierung brauchst aber den erfassten Wert nicht. Etwas schneller und hält die Gruppennummerierung sauber.

Warum friert meine Regex die Seite ein?

Katastrophales Backtracking. Muster mit verschachtelten Quantoren auf überlappenden Zeichen (wie (a*)*b oder (.+)+$) können bei nicht-passenden Eingaben exponentielle Zeit benötigen. Die Engine versucht jede mögliche Kombination bevor sie aufgibt. Lösung: Quantoren spezifischer machen oder umstrukturieren um Verschachtelung auf denselben Zeichen zu vermeiden.

Wie matche ich Sonderzeichen wörtlich?

Mit Backslash escapen: \. für Punkt, \* für Sternchen, \( für Klammer, \\ für Backslash selbst. Innerhalb einer Zeichenklasse [ ] verlieren die meisten Sonderzeichen ihre Bedeutung außer ] \ ^ -. Im Zweifelsfall escapen. Ein unnötiger Escape ist harmlos, ein fehlender ist ein Bug.

Tipps und verwandte Workflows

  • Regex gegen JSON-Daten testen? Formatiere sie zuerst mit dem JSON-Formatierer.
  • Übereinstimmenden Text zur Verifizierung hashen? Dafür gibt es den Hash-Generator.
  • Per Regex gefundene URLs sicher kodieren? Geht mit dem URL-Encoder.
  • Base64-kodierte Strings in deiner Regex? Dekodiere sie mit dem Base64-Encoder.