Regulärer Ausdruck (Regex)
Übersicht
Reguläre Ausdrücke in der Content Management API (CMA) ermöglichen den Musterabgleich mit der RE2-Engine für reguläre Ausdrücke.
Zuvor haben wir die JavaScript-Engine für reguläre Ausdrücke verwendet. Ab dem 21. April 2025 verwenden wir die RE2-Ausdrucks-Engine, um die Sicherheit, Leistung und Wartbarkeit zu verbessern und eine strengere Bewertung regulärer Ausdrücke durchzusetzen.
Zu den wichtigsten Vorteilen der RE2-Engine für reguläre Ausdrücke gehören:
Beseitigung von katastrophalem Backtracking: Die RegExp-Engine von JavaScript ermöglicht komplexe Muster, die zu exponentieller Laufzeit (ReDoS-Angriffe) führen können. RE2 verhindert diese Probleme, indem es strengere Regeln durchsetzt.
Bessere Leistung und Effizienz: RE2 wird in linearer Zeitkomplexität ausgeführt, um sicherzustellen, dass sich die Auswertung von regulären Ausdrücken nicht auf die Systemleistung auswirkt.
Verbesserte Sicherheit: Durch das Verbot bestimmter Muster wie Backreferences und verschachtelter Quantifikatoren mindert RE2 die Risiken, die mit schlecht konstruierten regulären Ausdrücken verbunden sind.
Konsistenz und Vorhersehbarkeit: Im Gegensatz zu RegExp von JavaScript bietet RE2 ein deterministischeres Matching-Verhalten, das unerwartetes Verhalten aufgrund von übermäßigem Backtracking verhindert.
Unterstützte Flags
| Flag | Beschreibung |
| i | Groß-/Kleinschreibung wird nicht berücksichtigt |
| m | Mehrzeiliger Abgleich (betrifft ^ und $) |
| s | Punkt (.) entspricht Zeilenumbruchzeichen (\n) |
| u | Unicode-Unterstützung |
Nicht unterstützte Funktion
Die folgenden Funktionen werden nicht mehr unterstützt:
Global Flag („g“): RE2 unterstützt das Flag „g“ nicht. Stattdessen sollten Nutzer*innen manuell über Übereinstimmungen iterieren.
Wichtig: Auch wenn RE2 das Global Flag (
g) nicht unterstützt, wird es bei der Ausführung ignoriert und bei der Validierung als zulässiges Flag akzeptiert.Lookaheads und Lookbehinds: Lookahead (`(?=...)`) und Lookbehind (`(?<=...)`) sind in RE2 nicht verfügbar.
Rückverweise: Rückverweise (`\1`, `\2` usw.) werden in RE2 nicht unterstützt.
Verschachtelte Quantifikatoren sind eingeschränkt: Muster mit verschachtelten Quantifikatoren (`(a+)+`) werden nicht mehr akzeptiert.
Das Global Flag (g) wird nicht unterstützt und wird während der Ausführung ignoriert – wie ersetze ich es?
JavaScript ermöglicht es dem Global Flag (g), mehrere Übereinstimmungen zu finden, aber RE2JS unterstützt es nicht.
Lösung:
Da unsere Regex-Prüfungen auf 0 im Vergleich zu 1 oder mehr Übereinstimmungen testen, sollte das Entfernen des
g-Flags kein Problem sein und hat keine Auswirkungen auf die Validierungsregel des Kunden/der Kundin.
Wichtig: Wir werden keinen Fehler ausgeben, wenn ein
g-Flag eingerichtet ist. Wir werden es jedoch bei der Ausführung von Regex im Validierungsschritt nicht berücksichtigen.
Wie repariere ich einen regulären Ausdruck mit Lookaheads oder Lookbehinds?
Wenn Sie Lookbehinds ((?<=...) oder (?<!...)) verwendet haben, müssen Sie Ihren regulären Ausdruck ohne sie neu schreiben.
Beispielkorrektur:
| Vorher (JavaScript RegExp, ungültig in RE2) | Nachher (RE2-kompatible Version) |
| foo(?=bar) | foo.bar |
Was soll ich tun, wenn mein Regex Rückverweise verwendet (\1, \2 usw.)?
Anstatt \1 zu verwenden, erzwingen Sie die Validierungslogik auf der Anwendungsebene.
Beispielkorrektur:
| Vorher (JavaScript RegExp, ungültig in RE2) | Nachher (RE2-kompatible Version) |
| (\w+) \1 | (\w+) \b\w+\b |
Wie gehe ich mit verschachtelten Quantifikatoren um?
Verschachtelte Quantifikatoren ((a+)+) können Leistungsprobleme verursachen und werden in RE2JS nicht unterstützt.
Beispielkorrektur:
| Vorher (JavaScript RegExp, ungültig in RE2) | Nachher (RE2-kompatible Version) |
| (a+)+b | (a{1,100})b |
Validierungsbeispiele mit RE2
E-Mail-Validierung
| Zulässige Werte | Nicht erlaubte Werte |
| name@domain.com | special%char@domain.com |
| 1-2.3_4@domain.com | name@domain |
| name@sub.domain.com | notanemail.com |
RE2-kompatibler regulärer Ausdruck
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
URL-Validierung
| Zulässige Werte | Nicht erlaubte Werte |
| http://foo.com/food_food | special%char@domain.com |
| http://userid:password@example.com:8080 | name@domain |
RE2-kompatibler regulärer Ausdruck
^https?:\/\/[^\s/$.?#].[^\s]*$
Validierung der US-Telefonnummer
| Zulässige Werte | Nicht erlaubte Werte |
| 1-123-456-7890 | 1_111-111-1111 |
| 1-123.555 1111 | 12345 |
| 18001114545 | 1-111-1a1-1111 |
RE2-kompatibler regulärer Ausdruck
^1[-.\s]?(\d{3})[-.\s]?(\d{3})[-.\s]?(\d{4})$
So testen Sie Ihren regulären Ausdruck
Wir empfehlen Ihnen, den RE2JS Playground zu verwenden, um Ihre regulären Ausdrücke auf RE2-Kompatibilität zu validieren und zu testen.
Wenn Sie Fragen haben oder Hilfe benötigen, wenden Sie sich an unser Support-Team.