Regex-Tester

RSS

Reguläre Ausdrücke erstellen und testen – mit Live-Hervorhebung der Treffer, Capture-Gruppen und Vorschau der Ersetzung.

Läuft zu 100 % in Ihrem Browser. Nichts, was Sie einfügen, wird hochgeladen oder gespeichert.
//

Treffer

Treffer-Details

#TrefferIndexGruppen

Ersetzen

So nutzen Sie den Regex-Tester

  1. Geben Sie Ihr Muster ohne die umschließenden Schrägstriche ein, zum Beispiel \d{3}-\d{4}.
  2. Schalten Sie die benötigten Flags ein (g, i, m, s, u, y).
  3. Fügen Sie einen Testtext ein. Treffer werden live hervorgehoben, und jede Erfassungsgruppe wird aufgelistet.
  4. Geben Sie optional einen Ersetzungstext ein, mit $1 oder $<name> für Gruppen, um das Ergebnis vorab zu sehen.

Der Tester nutzt die JavaScript-Regex-Engine Ihres Browsers. Ihre Muster und Testdaten bleiben auf Ihrem Gerät und werden weder hochgeladen noch gespeichert.

JavaScript-Regex-Syntax im Überblick

Reguläre Ausdrücke unterscheiden sich von Sprache zu Sprache. Dieses Tool nutzt die Variante JavaScript (ECMAScript), sodass die Ergebnisse dem entsprechen, was RegExp, String.prototype.match und replace in Browsern und Node.js tun. Der Großteil der Syntax lässt sich auf Python, PCRE und Java übertragen, aber Details wie die Syntax benannter Gruppen und die Unterstützung von Lookbehind unterscheiden sich.

Flags

FlagNameWirkung
gglobalFindet alle Treffer, statt nach dem ersten aufzuhören.
iignoreCaseIgnoriert Groß- und Kleinschreibung.
mmultiline^ und $ passen auf Anfang und Ende jeder Zeile.
sdotAll. passt auch auf Zeilenumbrüche.
uunicodeBehandelt das Muster als Unicode-Codepunkte; aktiviert Eigenschafts-Escapes \p{...}.
ystickySucht nur an der Position, die lastIndex angibt.

Bausteine

  • Zeichenklassen: [abc], Bereiche [a-z], Negation [^0-9], Kurzformen \d (Ziffer), \w (Wortzeichen), \s (Leerraum) und ihre Negationen \D, \W, \S. Ohne das Flag u decken \w und \d nur ASCII ab.
  • Quantoren: * (0 oder mehr), + (1 oder mehr), ? (0 oder 1), {n}, {n,}, {n,m}. Hängen Sie ? an, um sie genügsam (lazy) zu machen: .*?.
  • Gruppen: (...) erfasst, (?:...) gruppiert ohne Erfassung, (?<year>\d{4}) erzeugt eine benannte Gruppe, und \1 oder \k<year> verweist darauf zurück.
  • Anker: ^, $ und die Wortgrenze \b.
  • Lookarounds: (?=...) positiver Lookahead, (?!...) negativer Lookahead, (?<=...) positiver Lookbehind, (?<!...) negativer Lookbehind. Sie prüfen den Kontext, ohne Zeichen zu verbrauchen.
// Beträge nach einem Dollarzeichen, ohne das Zeichen
/(?<=\$)\d+(?:\.\d{2})?/g     "Total: $42.50"  →  "42.50"

// Datumsangaben mit benannten Gruppen umformatieren
"2024-03-15".replace(/(?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2})/, "$<d>.$<m>.$<y>")
// "15.03.2024"

Häufige Muster

ZweckMusterEinschränkungen
E-Mail (einfach)^[^\s@]+@[^\s@]+\.[^\s@]+$Nur eine Plausibilitätsprüfung. Die vollständige Adresssyntax ist weit komplexer; bestätigen Sie die Adresse, indem Sie eine E-Mail senden.
IPv4-Adresse^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$Lehnt Oktette über 255 und führende Nullen ab. Unterstützt kein IPv6.
Datum (JJJJ-MM-TT)^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$Akzeptiert unmögliche Daten wie 2023-02-31. Prüfen Sie mit einer Datumsbibliothek.
URL (http/https)^https?:\/\/[^\s/$.?#][^\s]*$Grobe Prüfung. Nutzen Sie für echtes Parsen den Konstruktor URL.

Speziell für IP-Adressen parst und konvertiert der IP-Adressen-Konverter sowohl IPv4 als auch IPv6.

Stolperfallen

Katastrophales Backtracking

Verschachtelte oder überlappende Quantoren können eine Backtracking-Engine wie die von JavaScript dazu bringen, bei einem Fehlschlag exponentiell viele Wege auszuprobieren. Schon ein paar Dutzend Zeichen können einen Browser-Tab einfrieren oder auf einem Server einen Denial-of-Service-Angriff ermöglichen (ReDoS):

/^(a+)+$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!")   // kann hängen bleiben

/^a+$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!")       // sofort

Vermeiden Sie Muster wie (a+)+, (a|a)* oder (.*)*, sorgen Sie dafür, dass sich Alternativen gegenseitig ausschließen, und seien Sie konkret: [^"]* ist innerhalb von Anführungszeichen sicherer als .*.

Weitere Fallstricke

  • Ein regulärer Ausdruck mit dem Flag g merkt sich lastIndex; ruft man test() wiederholt auf demselben Objekt auf, wechselt das Ergebnis daher zwischen true und false.
  • Wenn Sie ein Muster aus einem String erzeugen, müssen Backslashes verdoppelt werden: new RegExp("\\d+").
  • Wer ^ und $ vergisst, bekommt einen Validator, der jede Eingabe akzeptiert, die einen Treffer bloß enthält.
Tipp: Parsen Sie strukturierte Formate wie HTML, JSON oder YAML nicht mit regulären Ausdrücken. Nutzen Sie einen Parser oder unseren JSON-Formatter und HTML-Formatter, um sie zu untersuchen.

Häufig gestellte Fragen

Warum funktioniert mein regulärer Ausdruck hier, aber nicht in Python oder PHP?

Die Varianten unterscheiden sich. Python schreibt benannte Gruppen als (?P<name>...) und unterstützt nur Lookbehind mit fester Länge; PCRE in PHP setzt Muster zwischen Begrenzungszeichen. Auch die Escape-Regeln für String-Literale unterscheiden sich zwischen den Sprachen.

Was ist der Unterschied zwischen gierigen und genügsamen Quantoren?

Gierige Quantoren (.*) erfassen so viel wie möglich und gehen dann schrittweise zurück; genügsame (.*?) erfassen so wenig wie möglich. Bei <b>x</b> passt <.*> auf den ganzen String, <.*?> dagegen nur auf <b>.

Unterstützt JavaScript Lookbehind?

Ja, seit ES2018, und anders als viele Engines erlaubt es Lookbehind mit variabler Länge. Alle aktuellen großen Browser unterstützen es.

Wie finde ich einen echten Punkt oder eine Klammer?

Maskieren Sie das Zeichen mit einem Backslash: \., \[, \(. Innerhalb einer Zeichenklasse sind die meisten Zeichen wörtlich gemeint, daher passt auch [.] auf einen Punkt.

Aktualisiert

In die Zwischenablage kopiert