Regex-Portabilität prüfen
Füge einen regulären Ausdruck ohne Begrenzer oder im JavaScript-Format `/pattern/flags` ein, um Konstrukte zu erkennen, die in Python `re` oder PCRE anders scheitern oder sich still anders verhalten können.
Die Verarbeitung erfolgt lokal in Ihrem Browser. Ihre Datei wird niemals hochgeladen.
Anleitung Tool
- Füge ein Muster mit oder ohne `/.../flags` ein; es bleibt im Browser.
- Starte die Analyse.
- Prüfe Konstrukte, die Syntaxfehler, stille Verhaltensunterschiede oder einseitige Kompatibilität verursachen.
- Manche Konstrukte haben keine mechanische Entsprechung und werden erläutert, nicht geraten.
Annahmen
- Statische Textanalyse; das Muster wird nicht gegen Beispieltext ausgeführt und die gesamte Grammatik wird nicht geparst.
- Verglichen werden JavaScript RegExp (ECMAScript), Python `re` und PCRE-artige Engines (PHP/Perl).
- Geprüft werden dokumentierte Unterschiede, nicht seltene engine- oder versionsspezifische Sonderfälle.
Quellen und Referenzdaten
Methodik
Der Mustertext wird auf acht bekannte Konstrukte geprüft: Python-exklusive Namensgruppen und Rückverweise, possessive Quantifizierer, atomare Gruppen, `\A`/`\Z`/`\z`, rekursive PCRE-Muster, Inline-Flags mitten im Muster sowie ASCII- gegenüber Unicode-Standardverhalten von `\d`/`\w`/`\s`.
Rechenbeispiel
Anker `\A` und `\Z`
Eingaben: /\Afoo.*bar\Z/
Ergebnis: JavaScript hat diese Anker nicht und kann die Buchstaben A/Z stillschweigend als Literale behandeln. Das Muster kompiliert, trifft aber etwas anderes.
Python-benannte Gruppe
Eingaben: (?P<year>\d{4})
Ergebnis: Syntaxfehler in JavaScript. JavaScript verwendet `(?<year>...)`; das Entfernen von P wird vorgeschlagen.
Possessiver Quantifizierer und atomare Gruppe
Eingaben: (?>a++)b
Ergebnis: PCRE-/Java-Konstrukte ohne entsprechende JavaScript-Syntax. Es gibt keine sichere Text-Ersetzung, die Semantik erfordert eine strukturelle Änderung.
Praktische Hinweise
- Verwende `\A`/`\Z`/`\z` nicht für JavaScript-Kompatibilität; prüfe stattdessen die genaue Bedeutung von `^`/`$` und Multiline-Flags.
- JavaScript verwendet `(?<name>...)`, Python `(?P<name>...)`; Muster müssen für jede Umgebung angepasst werden.
- Possessive Quantifizierer, atomare Gruppen und rekursive Muster erfordern oft ein Refactoring.
Häufige Fehler
- Annehmen, ein Muster, das in JavaScript kompiliert, verhalte sich wie die Python-/PCRE-Variante.
- Eine gemeinsame Syntax für benannte Gruppen annehmen.
Häufige Fragen
Warum sind `\A` und `\Z` riskanter als ein Syntaxfehler?
Possessive und atomare Konstrukte scheitern beim Kompilieren sichtbar. `\A` und `\Z` können kompilieren und still Buchstaben statt Anker treffen.
Kann das Werkzeug possessive Quantifizierer automatisch korrigieren?
Nein. Die Emulation erfordert strukturelle Änderungen und muss vom Musterautor entschieden werden.
Zuletzt geprüft:
Enger Scanner mit acht dokumentierten Konstrukten, kein RegEx-Parser oder -Motor. Es werden keine Muster auf Testdaten ausgeführt.
Design- und Tool-Einstellungen sowie gespeicherte und zuletzt verwendete Listen werden nur in diesem Browser gespeichert.