Der Regex, der mich am meisten Zeit kostete, war einer, den ich nicht geschrieben habe. Es war vier Jahre alt, saß in einer Validierungsschicht und sah aus, als wäre eine Katze über die Tastatur gelaufen: verschachtelte Gruppen, ein Lookahead, zwei Charakterklassen und ein {2,} Verstecken am Ende Ein Support-Ticket sagte, es lehne gültige Eingaben ab, und bevor ich es beheben konnte, musste ich es verstehen, was bedeutete, dass ich die Engine gedanklich einen Token nach dem anderen über das Muster laufen ließ. Das ist die Steuer, die jeder Entwickler auf einen unbekannten Regex zahlt, und es ist genau die Steuer, die Regex-Erklärer Auf Toolz.dev ist zum Entfernen gebaut In diesem Handbuch geht es darum, reguläre Ausdrücke zu lesen, anstatt sie zu dekodieren, und wie eine Token-für-Token-Aufschlüsselung eine Wand aus Symbolen in etwas verwandelt, das Sie wie gewöhnlichen Code überprüfen können.
tl; dr: Ein Regex-Erklärer analysiert einen regulären Ausdruck und beschreibt jeden Teil im einfachen Englisch, in der Reihenfolge, in der die Engine ihn liest: Anker, Zeichenklassen, Quantoren, Gruppen, Lookarounds und Escapes, alle beschriftet und eingerückt, sodass die verschachtelte Struktur sichtbar ist Die Regex-Erklärer Validiert das Muster mit der echten JavaScript-Engine und führt die gesamte Aufschlüsselung in Ihrem Browser durch, ohne dass etwas hochgeladen wurde.
Was ist ein Regex-Erklärer?
Ein Regex-Erklärer nimmt einen regulären Ausdruck und übersetzt ihn, ein Konstrukt nach dem anderen, in eine Beschreibung, die man lesen kann Anstatt anzustarren ^(?<user>[a-z0-9._%+-]+)@ Und indem Sie seine Bedeutung in Ihrem Kopf rekonstruieren, erhalten Sie eine geordnete Liste: Dies ist ein Start-of-String-Anker, dies ist eine benannte Erfassungsgruppe namens Benutzer, dies ist eine Zeichenklasse, die einem Kleinbuchstaben, einer Ziffer, einem Punkt, einem Prozentzeichen, einem Pluszeichen oder einem Bindestrich entspricht, und dieser Quantifizierer bedeutet ein oder mehrere Male. Das Muster hat sich nicht geändert, aber die Anstrengung, es zu verstehen, hat sich von Ihrem Kopf zum Werkzeug verlagert.
Der Wert kommt daher, dass reguläre Ausdrücke bewusst kompakt sind Jedes Symbol trägt Bedeutung, und die gleiche Absicht kann auf viele verschiedene Arten geschrieben werden, so dass es keine zuverlässige Möglichkeit gibt, ein Muster so zu überfliegen, wie Sie eine Funktion überfliegen Ein einzelner Streuner-Backslash ändert einen wörtlichen Punkt in & quot;any-Zeichen, & quot; und einen gierigen Quantifizierer, bei dem Sie einen faulen ändern wollten, welchen Text eine Gruppe erfasst, ein Regex richtig zu lesen bedeutet, die Engine zu simulieren, und die Simulation der Engine von Hand ist langsam und fehleranfällig Der Erklärer macht diese Simulation und zeigt Ihnen das Ergebnis.
Auf Toolz.dev ist der Fluss kurz Man fügt das Muster ohne seine umgebenden Schrägstriche ein, schaltet die verwendeten Flags um, und die Aufschlüsselung erscheint sofort Verschachtelte Gruppen werden eingerückt, so dass die Form des Musters auf einen Blick sichtbar ist, und jedes Flag wird im Kontext beschrieben, damit man versteht, wie es die ganze Übereinstimmung verändert und nicht nur die Syntax.
Wie unterscheidet sich ein Erklärer von einem Regex-Tester?
Diese beiden Tools beantworten unterschiedliche Fragen, und zu wissen, was Sie brauchen, spart Zeit Ein Regex-Tester führt ein Muster gegen Beispieltext aus und zeigt, was es übereinstimmt: die hervorgehobenen Übereinstimmungen, die Erfassungsgruppen und jeden Fehler Es antwortet & quot; macht dieses Muster auf dieser Eingabe das, was ich will." Ein Erklärer beschreibt, was das Muster bedeutet, ohne dass überhaupt eine Testeingabe erfolgt Es antwortet & quot; was sagt dieses Muster eigentlich. "
Sie greifen zum Erklärer, wenn der Regex das Unbekannte ist, nicht die Daten Die Überprüfung einer Pull-Anfrage, die ein Validierungsmuster hinzufügt, das Erben einer Codebasis voller undokumentierter Ausdrücke oder der Versuch, eine Antwort zu verstehen, die Sie aus einem Forum kopiert haben, sind alles Fälle, in denen Sie das Muster haben und wissen müssen, was es tut, bevor Sie ihm vertrauen Sie greifen nach dem Regex-Tester Wenn man das Muster bereits versteht und sein Verhalten anhand realer Beispiele bestätigen möchte, arbeiten die beiden in der Praxis als Paar: Erklären Sie ein Muster, um es zu verstehen, und testen Sie es dann, um es zu beweisen. Der Tester und der Erklärer sitzen genau deshalb nebeneinander auf Toolz.dev.
Es gibt ein drittes Werkzeug in der Familie, das es wert ist, benannt zu werden Die Regex-Builder Stellt ein Muster aus Komponenten und Vorlagen zusammen, wenn Sie bei Null anfangen Erstellen, erklären, testen: Diese drei decken den gesamten Lebenszyklus der Arbeit mit einem regulären Ausdruck ab, vom Schreiben eines Ausdrucks müssen Sie noch keinen verstehen, den Sie nicht geschrieben haben.
Was zeigt die Aufschlüsselung eigentlich?
Der Erklärer geht das Muster von links nach rechts und gibt pro Konstrukt eine beschriftete Zeile aus, in der Reihenfolge, in der die Engine auf sie trifft. Diese Reihenfolge ist wichtig, da ein regulärer Ausdruck nacheinander gelesen wird und das Sehen der Token in der Reihenfolge widerspiegelt, wie das Matching tatsächlich abläuft.
Anker stehen in den meisten Mustern an erster Stelle Die ^ und $ Symbole stimmen nicht mit Zeichen überein; Sie behaupten eine Position, den Anfang und das Ende der Zeichenfolge oder den Anfang und das Ende jeder Zeile, wenn das mehrzeilige Flag gesetzt ist. Der Erklärer notiert dieses duale Verhalten, sodass Sie nie von einem Anker überrascht werden, der sich unter dem anders verhält m Flagge.
Zeichenklassen, in eckigen Klammern geschrieben, beschreiben ein einzelnes Zeichen, das aus einer Menge gezogen wird Der Erklärer erweitert die Menge in Wörter: Bereiche wie a-z Werden & quot; der Bereich a bis z, " Kurzschrift entweicht wie \d Werden & quot; eine Ziffer, & quot; und ein führender Caret wird zu & quot; jedem Zeichen, das NOT" die aufgeführte Menge ist Eine dichte Klasse wie [a-zA-Z0-9._%+-] Liest sich als einfache Liste statt als Rätsel.
Bei Quantifizierern leben subtile Fehler, sodass sie ihre eigenen Linien erhalten. A * Null oder mehr ist + Ist eine oder mehrere ? Null oder eins ist, und {n,m} Expliziter Bereich ist Entscheidend ist, dass der Erklärer faule Quantoren markiert, die mit einem Nachlauf geschrieben werden ? Wie zum Beispiel +? oder *?„, weil sich der Unterschied zwischen gierig und faul ändert, welchen Text ein Muster erfasst, ohne ein einzelnes sichtbares Zeichen an anderer Stelle zu ändern.
Gruppen und Lookarounds werden eingerückt, um das Nisten anzuzeigen. Erfassen von Gruppen, nicht erfassenden Gruppen, benannten Gruppen und allen vier Lookaround-Typen wird jeweils beschrieben, was sie tun, und das darin enthaltene Kindmuster ist um eine Ebene eingerückt, sodass sich die Struktur wie eine verschachtelte Kontur und nicht wie eine flache Reihe von Symbolen liest.
So bilden die gängigen Konstrukte das ab, was Ihnen der Erklärer sagt:
| Konstruieren | Beispiel | Was der Erklärer sagt |
|---|---|---|
| Anker | ^ |
Start-of-String (oder Beginn einer Zeile mit der m-Flagge) |
| Charakterklasse | [a-z] |
Ein einzelnes Zeichen aus dem Bereich a bis z |
| Stenografie | \d |
Eine Ziffer, 0 bis 9 |
| Quantifizierer | {2,} |
2 oder mehr Mal wiederholt |
| Fauler Quantifizierer | +? |
Ein - oder mehrmals wiederholt, so wenig wie möglich |
| Gruppe erfassen | (...) |
Start einer Erfassungsgruppe, zur Wiederverwendung gespeichert |
| Benannte Gruppe | (?<id>...) |
Start einer benannten Erfassungsgruppe "id" |
| Lookahead | (?=...) |
Das beiliegende Muster muss folgen, wird aber nicht verbraucht |
| Rückreferenz | \1 |
Entspricht der gleichen erfassten Textgruppe 1 |
Die Beschreibungen folgen der in der verwendeten Terminologie Referenz für reguläre MDN-AusdrückeWenn Sie also ein einzelnes Konstrukt weiterlesen möchten, sind die Wörter in der Aufschlüsselung die Wörter, nach denen Sie suchen müssen.
Warum spielt der Geschmack eine Rolle?
Reguläre Ausdrücke sind keine einzige Sprache; sie sind eine Familie eng verwandter. JavaScript, PCRE (von PHP und vielen Tools verwendet), Python' s re Modul, Java und.NET teilen alle die Kernsyntax, aber sie divergieren an den Rändern, und an diesen Rändern entsteht Verwirrung. Der Regex-Erklärer beschreibt reguläre JavaScript-Ausdrücke, den von Browsern und Node.js verwendeten Flavour, denn das ist es, was das Tool bestätigt und was die meisten Webentwickler tatsächlich ausführen.
Der gemeinsame Kern ist groß und zuverlässig Zeichenklassen, die gemeinsamen Quantoren, Wechsel mit |, Gruppierung, Anker und die Standardkurzschriften wie \d und \w Bedeuten überall das gleiche Wenn dein Muster nur die verwendet, ist die Erklärung genau, unabhängig von der Sprache, in der du es irgendwann ausführen wirst Die Divergenzen liegen in den erweiterten Funktionen: Lookbehind-Unterstützung kam spät in JavaScript an und unterscheidet sich von PCRE, die Syntax der benannten Gruppe variiert zwischen den Geschmacksrichtungen, und einige Engines unterstützen Rekursion oder Possessivquantoren, die JavaScript überhaupt nicht hat.
Die praktische Regel ist einfach Behandeln Sie die Erklärung der gemeinsam genutzten Konstrukte als autoritativ, und überprüfen Sie jede Flavour-spezifische Erweiterung noch einmal mit der Dokumentation für Ihre Zielsprache, Weil der Erklärer das Muster zuerst mit der echten JavaScript-Engine validiert, wird ein Konstrukt, das JavaScript nicht unterstützt, als Fehler auftauchen und nicht als falsche Erklärung, was der sicherere Fehler ist Wenn Sie über den Stapel arbeiten, wie ich es tue, bewegen Sie sich zwischen einem PHP-Backend und einem JavaScript-Frontend, explizit über Flavour spart die Klasse von Bug, wo ein Muster, das an einer Stelle funktioniert hat, sich an einer anderen stillschweigend schlecht benimmt.
Wie lese ich ein richtiges Muster damit?
Nehmen Sie die Probe, die das Tool standardmäßig lädt, ein E-Mail-förmiges Muster: ^(?<user>[a-z0-9._%+-]+)@(?<domain>[a-z0-9.-]+\.[a-z]{2,})$ Mit der case-insensitive flag Für sich allein ist es ein Mundvoll, durch den Erklärer laufen und es zerfällt in einen kurzen, lesbaren Umriss.
der ^ Bekräftigt den Anfang der Zeichenfolge Die zuerst benannte Gruppe, der Benutzer, erfasst ein oder mehrere Zeichen aus einer Klasse von Kleinbuchstaben, Ziffern und der Zeichensetzung, die üblicherweise im lokalen Teil einer Adresse zulässig ist Dann ein Literal @. Die zweite benannte Gruppe, Domäne, erfasst einen oder mehrere Buchstaben, Ziffern, Punkte oder Bindestriche, gefolgt von einem wörtlichen Punkt und einem Lauf aus zwei oder mehr Buchstaben, was die Domäne der obersten Ebene darstellt. Schließlich $ Behauptet das Ende der Zeichenfolge Die i Flag bedeutet, dass das Ganze unabhängig vom Fall übereinstimmt, sodass die reinen Kleinbuchstaben immer noch Großbuchstabeneingaben akzeptieren.
So lesen, springen zwei Dinge heraus, die im Rohmuster unsichtbar sind Zuerst die {2,} Auf der Top-Level-Domain bedeutet das Muster akzeptiert jede TLD von zwei oder mehr Buchstaben, was für moderne Domains korrekt ist, aber eine internationalisierte TLD ablehnen würde, die in nicht-lateinischen Zeichen geschrieben ist Zweitens bedeuten die Anker, dass das Muster mit der gesamten Zeichenfolge übereinstimmen muss, sodass es eine ganze Adresse validiert, anstatt eine in einem größeren Text zu finden. Das sind genau die Arten von Details, die bestimmen, ob ein Validierungs-Regex zu streng oder zu locker ist, und sie sind in der Aufschlüsselung offensichtlich, während sie im Original leicht zu übersehen sind.
Wenn man ein Muster verstanden hat, möchte man oft etwas damit anfangen, wenn es sich um ein Find-and-Replace-Muster handelt, wird die Regex ersetzen Tool führt die Substitution mit Backreference-Unterstützung aus, Handelt es sich um ein Extraktionsmuster, wird die E-mail-extraktor Wendet eine kuratierte Version genau dieser Art von E-Mail-Matching auf Bulk-Text anErklärer ist der Leseschritt; das sind die Schauspielschritte.
Wann würde ich das eigentlich nutzen?
Code-Review ist der Fall, den ich am meisten getroffen habe Ein Teamkollege fügt einer Validierungsschicht oder einem Log-Parser einen regulären Ausdruck hinzu, und der Diff zeigt eine Zeile von Symbolen ohne Kommentar Einfügen in den Erklärer verwandelt einen fünfminütigen Blick in einen zehnsekündigen Lesevorgang, und er fängt die klassische Rezension verfehlt: einen nicht entkommenen Punkt, der zu jedem Charakter passt, einen gierigen Quantifizierer, der zu viel einfängt, einen Anker, der vorhanden ist oder fehlt, wenn er umgekehrt sein sollte Ich habe begonnen, die Aufschlüsselung als Kommentar in die Pull-Anfrage einzufügen, die das Muster für die nächste Person kostenlos dokumentiert.
Lernen ist die nächste Reguläre Ausdrücke gehören zu jenen Fähigkeiten, die nie ganz hängen bleiben, es sei denn, man benutzt sie täglich, und nach ein paar Monaten wieder darauf zurück zu kommen, bedeutet immer, die Syntax neu zu lernen Das Lesen realer Muster mit dem Erklärer ist ein schnellerer Weg zurück als das erneute Lesen eines Tutorials, denn man sieht die Konstrukte im Kontext, bei der Arbeit in der Realität, und nicht als isolierte Beispiele, mit der Zeit werden die Beschreibungen überflüssig, weil man sie verinnerlicht hat, worum es geht.
Debugging schließt die Schleife, wenn ein Muster mit dem Falschen übereinstimmt, verrät die Erklärung oft, warum, bevor man überhaupt zur Testeingabe greift Ein Quantor, der gierig ist, wenn er faul sein sollte, eine Zeichenklasse, die ein vergessenes Zeichen beinhaltet, ein fehlender Anker, der das Muster mit einer Teilzeichenfolge übereinstimmen lässt: All das ist in der Aufschlüsselung sichtbar Ich behalte den Erklärer neben der Regex-Tester So kann ich erklären und testen in der gleichen Sitzung, und beide leben in der breiteren Kit, die ich in der beschrieben Leitfaden für Webentwickler-Toolkitdrohen
Ist es privat und funktioniert es offline?
Ja zu beiden, und aus dem gleichen Grund Die gesamte Aufschlüsselung wird in JavaScript innerhalb Ihres Browsers berechnet Das Muster wird nie an einen Server gesendet, nichts wird protokolliert, und sobald die Seite geladen wurde, arbeitet das Tool weiter mit deaktivierter Verbindung Sie können dies bestätigen, indem Sie den Netzwerk-Tab öffnen oder offline gehen und zusehen, wie es weiter funktioniert.
Das ist wichtiger, als es speziell für reguläre Ausdrücke erscheinen mag Muster werden oft so geschrieben, dass sie sensible Formate abgleichen: interne Kennungen, API-Schlüsselformen, Kontonummernlayouts oder die Struktur privater Daten Einfügen eines davon in ein serverseitiges Tool bedeutet, eine Beschreibung Ihres Datenformats an Dritte weiterzugeben Das Halten der Analyse auf der Clientseite bedeutet, dass das Muster auf Ihrem Computer verbleibt, was das gleiche Privacy-First-Prinzip hinter jedem Tool auf Toolz.dev ist, und eines, über das ich ausführlicher geschrieben habe Datenschutz-Leitfadendrohen
FAQ
Wie verstehe ich einen komplexen regulären Ausdruck?
Fügen Sie das Muster in den Erklärer ein und lesen Sie die Token-by-Token-Aufschlüsselung, die jedes Konstrukt in einfacher englischer Sprache in der Reihenfolge beschreibt, in der die Engine es anwendet. Verschachtelte Gruppen werden eingerückt, damit Sie die Struktur sehen können. Dadurch wird die mentale Simulation der Engine dazu, einfach eine beschriftete Liste zu lesen, was schneller und weitaus weniger fehleranfällig ist.
Was ist der Unterschied zwischen einem Regex-Erklärer und einem Regex-Tester?
Ein Regex-Erklärer beschreibt, was ein Muster ohne jegliche Testeingabe bedeutet, während ein Regex-Tester das Muster gegen Beispieltext ausführt und zeigt, was es übereinstimmt Verwenden Sie den Erklärer, um ein unbekanntes Muster zu verstehen oder zu dokumentieren, und bestätigen Sie dann mit dem Tester, dass es sich wie erwartet gegen reale Daten verhält Sie beantworten verschiedene Fragen und funktionieren gut als Paar.
Welchen Regex-Geschmack beschreibt der Erklärer?
Es beschreibt reguläre JavaScript-Ausdrücke (ECMAScript), den von Browsern und Node.js verwendeten Flavour. Die meisten Syntax, einschließlich Zeichenklassen, Quantoren, Gruppen und Ankern, wird mit PCRE, Python und Java geteilt, sodass die Kernerklärung sprachübergreifend korrekt ist. Geschmacksspezifische Funktionen wie Lookbehind und Syntax der benannten Gruppe können unterschiedlich sein. Überprüfen Sie daher diese anhand Ihrer Zielsprache.
Was ist der Unterschied zwischen einem gierigen und einem faule Quantifizierer?
Ein gieriger Quantor wie + oder * stimmt vor dem Backtracking mit so viel Text wie möglich überein, während ein fauler Quantor, das gleiche Symbol gefolgt von ? wie +? oder *?, so wenig wie möglich übereinstimmt Der Erklärer beschriftet faule Quantoren explizit, da sich durch den Unterschied ändert, welchen Text ein Muster erfasst, ohne dass sich an anderer Stelle ein sichtbares Zeichen ändert.
Kann der Erklärer mit Lookahead und Blick hinten umgehen?
Ja. Positive und negative Lookahead, geschrieben (?=...) und (?!...), und positive und negative Lookbehind, geschrieben (?<=...) und (?<!...), sind jeweils mit dem beschriftet, was sie behaupten, und sind wie andere Gruppen eingerückt Lookarounds überprüfen, ob Text an einer Position erscheint oder nicht, ohne ihn in die Übereinstimmung aufzunehmen, was in den Beschreibungen ausdrücklich erwähnt wird.
Warum sagt der Erklärer, dass mein Muster ungültig ist?
Das Muster wird mit der echten RegExp-Engine kompiliert, bevor es erklärt wird, sodass eine unausgeglichene Klammer oder Klammer, ein ungültiges Escape oder ein unbekanntes Flag mit der genauen Fehlermeldung von engine' behoben wird. Beheben Sie das gemeldete Problem, meist eine fehlende schließende Klammer oder Klammer, und die Aufschlüsselung wird angezeigt.
Ist es sicher, einen Regex einzufügen, der mit privaten Daten übereinstimmt?
Ja. Das Muster wird vollständig in JavaScript in Ihrem Browser analysiert. Es wird nie an einen Server gesendet, nie protokolliert und das Tool funktioniert mit deaktivierter Verbindung, sobald die Seite geladen wurde. Sie können Muster aus privaten Codebasen oder solchen, die zu persönlichen oder proprietären Formaten passen, sicher erklären.
Wie unterscheidet sich das von einem Regex Builder?
Ein Regex-Builder hilft Ihnen, ein neues Muster aus Komponenten und Vorlagen zu konstruieren, wenn Sie von Grund auf neu beginnen, während der Erklärer ein Muster beschreibt, das Sie bereits haben. Die beiden ergänzen sich: Erstellen Sie ein Muster mit dem Regex-Builder, verstehen Sie ein vorhandenes mit dem Erklärer und bestätigen Sie beides anhand der tatsächlichen Eingabe mit dem Regex-Tester.
Lesen Sie Ihre eigenen Muster mit dem kostenlosen Regex-Erklärer. Es bricht einen regulären Ausdruck Token für Token auf einfachem Englisch, vollständig in Ihrem Browser, ohne hochgeladen zu haben.



