Zum Inhalt springen

Regex erklären

Regex Explainer

Zerlegt einen regulären Ausdruck in einen beschrifteten Baum, damit Sie lesen können, was jeder Teil tatsächlich matcht.

Zerlegt einen regulären Ausdruck in einen Baum und sagt, was jedes Stück tut – jede Gruppe, jeder Quantor, jede Klasse und jede Zusicherung, verschachtelt wie das Muster. Es ist derselbe Bildschirm wie der Tester, geöffnet auf seinem Erklären-Tab, denn ein Muster zu lesen und es auszuführen ist dieselbe Tätigkeit.

🔒 Läuft vollständig in Ihrem Browserregexexplainlearn
Ansicht

Muster

//g

kann irgendwo in der Zeichenkette treffen, 2 Fanggruppen.

Was jeder Teil tut

([\w.+-]+)@([\w-]+\.[\w.-]+)Der Reihe nach

Jedes davon muss passen, eines nach dem anderen, ohne etwas dazwischen.

([\w.+-]+)Fanggruppe 1

Trifft auf das Muster darin und merkt sich den Text, verfügbar als `match[1]` und in einer Ersetzung als `$1`.

[\w.+-]+Wiederholt +

Wiederholt ein Mal oder öfter, so oft wie möglich, und gibt nur zurück, wenn der Rest scheitert.

[\w.+-]Ein beliebiges Zeichen aus dieser Menge

Trifft auf genau ein Zeichen, und zwar auf das der folgenden, das in der Eingabe zuerst kommt.

Innerhalb einer Klasse ist `.` ein Punkt. Es bedeutet hier nicht „jedes Zeichen“, und es zu maskieren ändert nichts.

\wEin beliebiges Wortzeichen

Genau `[A-Za-z0-9_]`.

Das ist nur ASCII. Für einen regulären Ausdruck in JavaScript sind `é`, `한` und `ß` keine Wortzeichen, also trifft `\w+` weder auf ein koreanisches noch auf ein akzentuiertes Wort.

.Das Zeichen “.” (U+002E)

Wird genau verglichen, Groß- und Kleinschreibung eingeschlossen.

+Das Zeichen “+” (U+002B)

Wird genau verglichen, Groß- und Kleinschreibung eingeschlossen.

-Das Zeichen “-” (U+002D)

Wird genau verglichen, Groß- und Kleinschreibung eingeschlossen.

@Das Zeichen “@” (U+0040)

Wird genau verglichen, Groß- und Kleinschreibung eingeschlossen.

([\w-]+\.[\w.-]+)Fanggruppe 2

Trifft auf das Muster darin und merkt sich den Text, verfügbar als `match[2]` und in einer Ersetzung als `$2`.

[\w-]+\.[\w.-]+Der Reihe nach

Jedes davon muss passen, eines nach dem anderen, ohne etwas dazwischen.

[\w-]+Wiederholt +

Wiederholt ein Mal oder öfter, so oft wie möglich, und gibt nur zurück, wenn der Rest scheitert.

[\w-]Ein beliebiges Zeichen aus dieser Menge

Trifft auf genau ein Zeichen, und zwar auf das der folgenden, das in der Eingabe zuerst kommt.

\wEin beliebiges Wortzeichen

Genau `[A-Za-z0-9_]`.

Das ist nur ASCII. Für einen regulären Ausdruck in JavaScript sind `é`, `한` und `ß` keine Wortzeichen, also trifft `\w+` weder auf ein koreanisches noch auf ein akzentuiertes Wort.

-Das Zeichen “-” (U+002D)

Wird genau verglichen, Groß- und Kleinschreibung eingeschlossen.

\.Das Zeichen “.” (U+002E)

Wird genau verglichen, Groß- und Kleinschreibung eingeschlossen.

Der Backslash ist hier überflüssig — an dieser Stelle hat dieses Zeichen keine besondere Bedeutung.

[\w.-]+Wiederholt +

Wiederholt ein Mal oder öfter, so oft wie möglich, und gibt nur zurück, wenn der Rest scheitert.

[\w.-]Ein beliebiges Zeichen aus dieser Menge

Trifft auf genau ein Zeichen, und zwar auf das der folgenden, das in der Eingabe zuerst kommt.

Innerhalb einer Klasse ist `.` ein Punkt. Es bedeutet hier nicht „jedes Zeichen“, und es zu maskieren ändert nichts.

\wEin beliebiges Wortzeichen

Genau `[A-Za-z0-9_]`.

Das ist nur ASCII. Für einen regulären Ausdruck in JavaScript sind `é`, `한` und `ß` keine Wortzeichen, also trifft `\w+` weder auf ein koreanisches noch auf ein akzentuiertes Wort.

.Das Zeichen “.” (U+002E)

Wird genau verglichen, Groß- und Kleinschreibung eingeschlossen.

-Das Zeichen “-” (U+002D)

Wird genau verglichen, Groß- und Kleinschreibung eingeschlossen.

Flags

g — global
Findet jeden Treffer, statt beim ersten aufzuhören. Dafür verschieben `.test()` und `.exec()` zwischen den Aufrufen `lastIndex`, was die übliche Quelle von „jeder zweite Aufruf schlägt fehl“ ist.

So funktioniert es

  1. Fügen Sie das Muster ein, das Sie geerbt haben

    Das in der Konfigurationsdatei, an dessen Verfasser sich niemand erinnert. Es wird geparst statt per Mustervergleich erfasst, sodass die Aufschlüsselung der echten Struktur folgt.

  2. Lesen Sie den Baum von oben nach unten

    Jeder Knoten zeigt das Quellfragment, was es ist und was es tut. Hinweise markieren die Teile, die häufig überraschen – ein verschachtelter Quantor, eine Gruppe, die erfasst, obwohl sie es nicht musste.

  3. Wechseln Sie zu Testen, um Ihre Lesart zu prüfen

    Das Muster wird mitgenommen. Einen Regex zu verstehen und zu bestätigen, dass er tut, was Sie denken, sind zwei verschiedene Schritte, und der zweite ist der billige.

Häufige Fragen

Was bedeutet die Warnung bei einem verschachtelten Quantor?

Etwas wie `(a+)+` gibt der Engine exponentiell viele Möglichkeiten, denselben Text aufzuteilen, sodass eine nicht passende Eingabe länger dauern kann als das Alter des Universums. Das ist die Form hinter den meisten Denial-of-Service-Angriffen mit regulären Ausdrücken.

Warum sagt es mir, dass eine Gruppe erfasst?

Weil eine erfassende Gruppe, die Sie nicht verwenden, einen Platz kostet und die Nummerierung derer verschiebt, die Sie verwenden. `(?:…)` gruppiert, ohne zu erfassen, was `$1` auf das zeigen lässt, was Sie meinten.

Erklärt es auch Flags?

Ja, in einem eigenen Panel – jedes gesetzte Flag, sein Name und was es ändert. `m` und `s` sind besonders lesenswert, denn ihre Namen legen jeweils das Verhalten des anderen nahe.

Eingabe aus

Danach

Diese Tools nehmen an, was dieses hier erzeugt, das Ergebnis kann also direkt weiter.