So nutzen Sie den Regex-Tester
- Geben Sie Ihr Muster ohne die umschließenden Schrägstriche ein, zum Beispiel
\d{3}-\d{4}. - Schalten Sie die benötigten Flags ein (
g,i,m,s,u,y). - Fügen Sie einen Testtext ein. Treffer werden live hervorgehoben, und jede Erfassungsgruppe wird aufgelistet.
- Geben Sie optional einen Ersetzungstext ein, mit
$1oder$<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
| Flag | Name | Wirkung |
|---|---|---|
g | global | Findet alle Treffer, statt nach dem ersten aufzuhören. |
i | ignoreCase | Ignoriert Groß- und Kleinschreibung. |
m | multiline | ^ und $ passen auf Anfang und Ende jeder Zeile. |
s | dotAll | . passt auch auf Zeilenumbrüche. |
u | unicode | Behandelt das Muster als Unicode-Codepunkte; aktiviert Eigenschafts-Escapes \p{...}. |
y | sticky | Sucht 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 Flagudecken\wund\dnur 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\1oder\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
| Zweck | Muster | Einschrä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
gmerkt sichlastIndex; ruft mantest()wiederholt auf demselben Objekt auf, wechselt das Ergebnis daher zwischentrueundfalse. - 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.
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