Kurzübersicht der regulären Ausdrucks-Syntax

Diese Seite bietet eine allgemeine Übersicht über alle Funktionen der RegExp-Syntax, indem sie die Inhalte der Artikel im RegExp-Leitfaden zusammenführt. Wenn Sie weitere Informationen zu einem bestimmten Thema benötigen, folgen Sie bitte dem Link in der entsprechenden Überschrift, um auf den vollständigen Artikel zuzugreifen, oder gehen Sie zu dem Leitfaden.

Zeichenklassen

Zeichenklassen unterscheiden Arten von Zeichen, zum Beispiel die Unterscheidung zwischen Buchstaben und Ziffern.

Zeichen Bedeutung
[xyz]
[a-c]

Zeichenklasse: Passt zu einem der eingeschlossenen Zeichen. Sie können eine Zeichenfolge durch ein Minus angeben, aber wenn das Minus als erstes oder letztes Zeichen innerhalb der eckigen Klammern erscheint, wird es als wörtliches Minus betrachtet und in die Zeichenklasse als normales Zeichen aufgenommen.

Zum Beispiel ist [abcd] gleich [a-d]. Sie passen zur "b" in "brisket" und zur "c" in "chop".

Zum Beispiel passen [abcd-] und [-abcd] zur "b" in "brisket", zur "c" in "chop" und zum "-" (Minus) in "non-profit".

Zum Beispiel ist [\w-] gleich [A-Za-z0-9_-]. Beide passen zur "b" in "brisket", zur "c" in "chop" und zur "n" in "non-profit".

[^xyz]
[^a-c]

Negierte Zeichenklasse: Passt zu allem, was nicht in den eckigen Klammern enthalten ist. Sie können eine Zeichenreihe durch ein Minus angeben, aber wenn das Minus als erstes Zeichen nach dem ^ oder als letztes Zeichen innerhalb der eckigen Klammern erscheint, wird es als wörtliches Minus betrachtet und in die Zeichenklasse als normales Zeichen aufgenommen. Zum Beispiel ist [^abc] gleich [^a-c]. Sie passen initial zur "o" in "bacon" und zur "h" in "chop".

Hinweis: Das ^ Zeichen kann auch den Anfang des Eingabebereichs kennzeichnen.

.

Wildcard: Passt zu jedem einzelnen Zeichen, mit Ausnahme von Zeilenbegrenzern: \n, \r, \u2028 oder \u2029. Zum Beispiel passt /.y/ zu "my" und "ay", aber nicht zu "yes", in "yes make my day", da in "yes" kein Zeichen vor "y" steht. Wenn das dotAll (s) Flag aktiviert ist, passt es auch zu Zeilenbegrenzern. Innerhalb einer Zeichenklasse verliert der Punkt seine spezielle Bedeutung und passt zu einem wörtlichen Punkt.

\d

Ziffernzeichenklassenflucht: Passt zu jeder Ziffer (arabische Zahl). Entspricht [0-9]. Zum Beispiel passen /\d/ oder /[0-9]/ zur "2" in "B2 is the suite number".

\D

Nicht-Ziffern-Zeichenklassenflucht: Passt zu jedem Zeichen, das keine Ziffer (arabische Zahl) ist. Entspricht [^0-9]. Zum Beispiel passen /\D/ oder /[^0-9]/ zur "B" in "B2 is the suite number".

\w

Wörter-Zeichenklassenflucht: Passt zu jedem alphanumerischen Zeichen des Basislateinalphabets, einschließlich des Unterstrichs. Entspricht [A-Za-z0-9_]. Zum Beispiel passt /\w/ zur "a" in "apple", "5" in "$5.28", "3" in "3D" und "m" in "Émanuel".

\W

Nicht-Wörter-Zeichenklassenflucht: Passt zu jedem Zeichen, das kein Wortzeichen aus dem Basislateinalphabet ist. Entspricht [^A-Za-z0-9_]. Zum Beispiel passen /\W/ oder /[^A-Za-z0-9_]/ zum "%" in "50%" und zur "É" in "Émanuel".

\s

Leerraum-Zeichenklassenflucht: Passt zu einem einzelnen Leerzeichen, einschließlich Leerzeichen, Tabulator, Form-Feed, Zeilenvorschub und anderen Unicode-Leerräumen. Entspricht [\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Zum Beispiel passt /\s\w*/ zu " bar" in "foo bar".

\S

Nicht-Leerraum-Zeichenklassenflucht: Passt zu einem einzelnen Zeichen, das kein Leerraum ist. Entspricht [^\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Zum Beispiel passt /\S\w*/ zu "foo" in "foo bar".

\t Passt zu einem horizontalen Tabulator.
\r Passt zu einem Wagenrücklauf.
\n Passt zu einem Zeilenumbruch.
\v Passt zu einem vertikalen Tabulator.
\f Passt zu einem Form-Feed.
[\b] Passt zu einem Rückschritt. Wenn Sie nach der Wortgrenzen-Assertion (\b) suchen, siehe Assertions.
\0 Passt zu einem NUL-Zeichen. Folgen Sie diesem nicht mit einer weiteren Ziffer.
\cX

Passt zu einem Steuerzeichen unter Verwendung der Caret-Notation, wobei "X" ein Buchstabe von A–Z ist (entsprechend den Codepunkten U+0001U+001A). Zum Beispiel passt /\cM\cJ/ zu "\r\n".

\xhh Passt zu dem Zeichen mit dem Code hh (zwei hexadezimale Ziffern).
\uhhhh Passt zu einer UTF-16-Codeeinheit mit dem Wert hhhh (vier hexadezimale Ziffern).
\u{hhhh} oder \u{hhhhh} (Nur wenn das u-Flag gesetzt ist.) Passt zu dem Zeichen mit dem Unicode-Wert U+hhhh oder U+hhhhh (hexadezimale Ziffern).
\p{UnicodeProperty}, \P{UnicodeProperty}

Unicode-Zeichenklassenflucht: Passt zu einem Zeichen basierend auf seinen Unicode-Zeichen-Eigenschaften: zum Beispiel Emoji-Zeichen, oder japanische Katakana-Zeichen, oder chinesische/japanische Han/Kanji-Zeichen, etc.

\

Gibt an, dass das folgende Zeichen speziell behandelt oder "entkommen" soll. Es kann auf zwei Arten funktionieren.

  • Bei Zeichen, die normalerweise wörtlich behandelt werden, zeigt es an, dass das nächste Zeichen speziell ist und nicht wörtlich interpretiert werden soll. Zum Beispiel passt /b/ zum Zeichen "b". Indem ein Rückstrich vor "b" gesetzt wird, also durch Verwendung von /\b/, wird das Zeichen speziell und bedeutet "Pass auf eine Wortgrenze".
  • Bei Zeichen, die normalerweise speziell behandelt werden, zeigt es an, dass das nächste Zeichen nicht speziell ist und wörtlich interpretiert werden soll. Zum Beispiel ist "*" ein spezielles Zeichen, das bedeutet, dass 0 oder mehr Vorkommen des vorhergehenden Zeichens übereinstimmen sollten; zum Beispiel bedeutet /a*/ 0 oder mehr "a"s zu finden. Um * wörtlich zu finden, setzen Sie einen Rückstrich davor; zum Beispiel passt /a\*/ zu "a*".

Hinweis: Um dieses Zeichen wörtlich zu finden, entkommen Sie es mit sich selbst. Mit anderen Worten: um nach \ zu suchen, verwenden Sie /\\/.

x|y

Disjunktion: Passt entweder zu "x" oder "y". Jede Komponente, die durch eine Pipe (|) getrennt ist, wird als Alternative bezeichnet. Zum Beispiel, /green|red/ passt zu "green" in "green apple" und zu "red" in "red apple".

Hinweis: Eine Disjunktion ist eine andere Möglichkeit, "eine Auswahlmenge" anzugeben, ist jedoch keine Zeichenklasse. Disjunktionen sind keine Atome — Sie müssen eine Gruppe verwenden, um sie Teil eines größeren Musters zu machen. [abc] ist funktionell gleichwertig mit (?:a|b|c).

Assertions

Assertions enthalten Grenzen, die die Anfänge und Enden von Zeilen und Wörtern anzeigen, und andere Muster, die auf irgendeine Weise anzeigen, dass ein Treffer möglich ist (einschließlich Look-ahead, Look-behind und bedingte Ausdrücke).

Boundary-type Assertions

Zeichen Bedeutung
^

Eingabebereich-Anfangs-Assertion: Passt zum Anfang der Eingabe. Wenn das multiline (m) Flag aktiviert ist, passt es auch unmittelbar nach einem Zeilenumbruchzeichen. Zum Beispiel, /^A/ passt nicht zu der "A" in "an A", aber passt zur ersten "A" in "An A".

Hinweis: Dieses Zeichen hat eine andere Bedeutung, wenn es zu Beginn einer Zeichenklasse erscheint.

$

Eingabebereich-Ende-Assertion: Passt zum Ende der Eingabe. Wenn das multiline (m) Flag aktiviert ist, passt es auch unmittelbar vor einem Zeilenumbruchzeichen. Zum Beispiel, /t$/ passt nicht zur "t" in "eater", aber passt dazu in "eat".

\b

Wortgrenzen-Assertion: Passt zu einer Wortgrenze. Dies ist die Position, an der ein Wortzeichen nicht von einem anderen Wortzeichen gefolgt oder vorangestellt wird, wie zum Beispiel zwischen einem Buchstaben und einem Leerzeichen. Beachten Sie, dass eine gefundene Wortgrenze nicht im Treffer enthalten ist. Mit anderen Worten, die Länge einer gefundenen Wortgrenze beträgt null.

Beispiele:

  • /\bm/ passt zu "m" in "moon".
  • /oo\b/ passt nicht zu "oo" in "moon", da "oo" von "n" gefolgt wird, das ein Wortzeichen ist.
  • /oon\b/ passt zu "oon" in "moon", da "oon" das Ende der Zeichenkette ist und somit nicht von einem Wortzeichen gefolgt wird.
  • /\w\b\w/ wird niemals irgendetwas passen, da ein Wortzeichen niemals sowohl von einem Nicht-Wort als auch von einem Wortzeichen gefolgt werden kann.

Um ein Rückschrittzeichen ([\b]) zu treffen, siehe Zeichenklassen.

\B

Nicht-Wortgrenzen-Assertion: Passt zu einer Nicht-Wortgrenze. Dies ist eine Position, an der das vorherige und das nächste Zeichen vom gleichen Typ sind: Entweder müssen beide Wörter sein, oder beide müssen Nicht-Wörter sein, zum Beispiel zwischen zwei Buchstaben oder zwischen zwei Leerzeichen. Der Anfang und das Ende einer Zeichenfolge werden als Nicht-Wörter betrachtet. Ebenso wie die gefundene Wortgrenze wird auch die gefundene Nicht-Wortgrenze nicht im Treffer enthalten. Zum Beispiel, /\Bon/ passt zu "on" in "at noon", und /ye\B/ passt zu "ye" in "possibly yesterday".

Andere Assertions

Hinweis: Das ? Zeichen kann auch als Quantor verwendet werden.

Zeichen Bedeutung
x(?=y)

Lookahead Assertion: Passt zu "x" nur, wenn "x" von "y" gefolgt wird. Zum Beispiel, /Jack(?=Sprat)/ passt zu "Jack" nur, wenn es von "Sprat" gefolgt wird.
/Jack(?=Sprat|Frost)/ passt zu "Jack" nur, wenn es von "Sprat" oder "Frost" gefolgt wird. Weder "Sprat" noch "Frost" sind jedoch Teil der Trefferresultate.

x(?!y)

Negative Lookahead Assertion: Passt zu "x" nur, wenn "x" nicht von "y" gefolgt wird. Zum Beispiel, /\d+(?!\.)/ passt zu einer Zahl nur, wenn diese nicht von einem Dezimalpunkt gefolgt wird. /\d+(?!\.)/.exec('3.141') passt zu "141", aber nicht zu "3".

(?<=y)x

Lookbehind Assertion: Passt zu "x" nur, wenn "x" von "y" vorausgegangen wird. Zum Beispiel, /(?<=Jack)Sprat/ passt zu "Sprat" nur, wenn es von "Jack" vorausgegangen wird. /(?<=Jack|Tom)Sprat/ passt zu "Sprat" nur, wenn es von "Jack" oder "Tom" vorausgegangen wird. Weder "Jack" noch "Tom" sind jedoch Teil der Trefferresultate.

(?<!y)x

Negative Lookbehind Assertion: Passt zu "x" nur, wenn "x" nicht von "y" vorausgegangen wird. Zum Beispiel, /(?<!-)\d+/ passt zu einer Zahl nur, wenn diese nicht von einem Minuszeichen vorausgegangen wird. /(?<!-)\d+/.exec('3') passt zu "3". /(?<!-)\d+/.exec('-3') tritt kein Treffer auf, weil die Zahl von einem Minuszeichen vorausgegangen wird.

Gruppen und Rückverweise

Gruppen und Rückverweise kennzeichnen Gruppen von Ausdruckszeichen.

Zeichen Bedeutung
(x)

Sammelgruppe: Passt zu x und merkt sich den Treffer. Zum Beispiel passt /(foo)/ zu und merkt sich "foo" in "foo bar".

Ein regulärer Ausdruck kann mehrere Sammelgruppen enthalten. In den Ergebnissen stehen die Treffer oft in einem Array, dessen Mitglieder in derselben Reihenfolge wie die linken Klammern in der Sammelgruppe sind. Das ist in der Regel einfach die Reihenfolge der Sammelgruppen selbst. Dies wird wichtig, wenn Sammelgruppen verschachtelt sind. Treffer können mit dem Index der Elemente des Ergebnis-Arrays ([1], …, [n]) oder von den vordefinierten RegExp-Eigenschaften ($1, …, $9) zugegriffen werden.

Sammelgruppen haben einen Leistungseinbruch. Wenn Sie das gefundene Teilzeichen nicht abrufen müssen, bevorzugen Sie nicht-sammelnde Klammern (siehe unten).

String.prototype.match() gibt keine Gruppen zurück, wenn das /.../g-Flag gesetzt ist. Sie können jedoch weiterhin String.prototype.matchAll() verwenden, um alle Treffer zu erhalten.

(?<Name>x)

Benannte Sammelgruppe: Passt zu "x" und speichert es bei den Gruppen-Eigenschaften der zurückgegebenen Treffer unter dem Namen, der durch <Name> angegeben ist. Die spitzen Klammern (< und >) sind für den Gruppennamen erforderlich.

Um zum Beispiel die US-amerikanische Vorwahl aus einer Telefonnummer zu extrahieren, könnten wir /\((?<area>\d\d\d)\)/ verwenden. Die resultierende Nummer würde unter matches.groups.area angezeigt.

(?:x)

Nicht-Sammelgruppe: Passt zu "x" aber merkt sich den Treffer nicht. Das gefundene Teilzeichen kann nicht aus den Ergebniselementen des Arrays ([1], …, [n]) oder aus den vordefinierten RegExp-Eigenschaften ($1, …, $9) abgerufen werden.

(?flags:x), (?:flags-flags:x)

Modifier: Aktiviert oder deaktiviert die angegebenen Flags nur für das eingeschlossene Muster. Nur die i, m und s Flags können in einem Modifier verwendet werden.

\n

Rückverweis: Dabei ist "n" eine positive Ganzzahl. Passt zu demselben Teilzeichen, das von der n-ten Sammelgruppe im regulären Ausdruck (zählt linke Klammern) getroffen wurde. Zum Beispiel, /apple(,)\sorange\1/ passt zu "apple, orange," in "apple, orange, cherry, peach".

\k<Name>

Benannter Rückverweis: Ein Rückverweis auf das letzte Teilzeichen, das zur Benannten Sammelgruppe passt, die von <Name> angegeben ist.

Zum Beispiel, /(?<title>\w+), yes \k<title>/ passt zu "Sir, yes Sir" in "Do you copy? Sir, yes Sir!".

Hinweis: \k wird hier wörtlich verwendet, um den Anfang eines Rückverweises auf eine Benannte Sammelgruppe anzuzeigen.

Quantoren

Quantoren geben die Anzahl der zu treffenden Zeichen oder Ausdrücke an.

Hinweis: Im Folgenden bezieht sich item nicht nur auf einzelne Zeichen, sondern enthält auch Zeichenklassen und Gruppen und Rückverweise.

Zeichen Bedeutung
x*

Passt das vorhergehende Element "x" 0 oder mehrmals. Zum Beispiel, /bo*/ passt zu "boooo" in "A ghost booooed" und "b" in "A bird warbled", aber zu nichts in "A goat grunted".

x+

Passt das vorhergehende Element "x" 1 oder mehrmals. Entspricht {1,}. Zum Beispiel passt /a+/ zu der "a" in "candy" und zu allen "a"s in "caaaaaaandy".

x?

Passt das vorhergehende Element "x" 0 oder 1 Mal. Zum Beispiel, /e?le?/ passt zu "el" in "angel" und zu "le" in "angle."

Wenn unmittelbar nach einem der Quantoren *, +, ? oder {} verwendet, macht es den Quantor nicht-gierig (d.h. es wird die Mindestanzahl von Treffern gesucht), im Gegensatz zur Standardeinstellung, die gierig ist (d.h. es werden die Maximalanzahl von Treffern gesucht).

x{n}

Dabei ist "n" eine nicht-negative Ganzzahl. Passt genau "n" Vorkommen des vorhergehenden Elements "x". Zum Beispiel passt /a{2}/ nicht zur "a" in "candy", aber es passt zu allen "a"s in "caandy" und zu den ersten beiden "a"s in "caaandy".

x{n,}

Dabei ist "n" eine nicht-negative Ganzzahl. Passt zu mindestens "n" Vorkommen des vorhergehenden Elements "x". Zum Beispiel passt /a{2,}/ nicht zur "a" in "candy", aber es passt zu allen "a"s in "caandy" und in "caaaaaaandy".

x{n,m}

Dabei sind "n" und "m" nicht-negative Ganzzahlen und m >= n, passt zu mindestens "n" und höchstens "m" Vorkommen des vorhergehenden Elements "x". Zum Beispiel passt /a{1,3}/ zu nichts in "cndy", zu der "a" in "candy", zu den beiden "a"s in "caandy" und zu den ersten drei "a"s in "caaaaaaandy". Beachten Sie, dass beim Abgleich von "caaaaaaandy", der Treffer "aaa" ist, obwohl der ursprüngliche String mehr "a"s hatte.

x*?
x+?
x??
x{n}?
x{n,}?
x{n,m}?

Standardmäßig sind Quantoren wie * und + "gierig", was bedeutet, dass sie versuchen, so viel wie möglich von der Zeichenfolge zu finden. Das ? Zeichen nach dem Quantor macht den Quantor "nicht-gierig", was bedeutet, dass er so bald wie möglich aufhört, sobald er einen Treffer findet. Zum Beispiel, bei einer Zeichenfolge wie "some <foo> <bar> new </bar> </foo> thing":

  • /<.*>/ passt zu "<foo> <bar> new </bar> </foo>"
  • /<.*?>/ passt zu "<foo>"