Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

Spickzettel zur Syntax von regulären Ausdrücken

Diese Seite bietet einen allgemeinen Spickzettel zu allen Möglichkeiten der RegExp-Syntax, indem der Inhalt der Artikel im RegExp-Leitfaden zusammengefasst wird. Wenn Sie mehr Informationen zu einem bestimmten Thema benötigen, bitte folgen Sie dem Link der entsprechenden Überschrift, um auf den vollständigen Artikel zuzugreifen, oder gehen Sie zum Leitfaden.

Zeichensatzklassen

Zeichensatzklassen unterscheiden Arten von Zeichen, wie zum Beispiel Buchstaben und Ziffern.

Zeichen Bedeutung
[xyz]
[a-c]

Zeichenklasse: Passt zu einem der eingeschlossenen Zeichen. Sie können einen Bereich von Zeichen angeben, indem Sie einen Bindestrich verwenden. Wenn der Bindestrich jedoch als erstes oder letztes Zeichen in den eckigen Klammern erscheint, wird er als buchstäblicher Bindestrich interpretiert, der in die Zeichenklasse als normales Zeichen aufgenommen wird.

Zum Beispiel ist [abcd] dasselbe wie [a-d]. Sie passen zum "b" in "brisket" und zum "c" in "chop".

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

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

[^xyz]
[^a-c]

Negierte Zeichenklasse: Passt zu allem, was nicht in den eckigen Klammern eingeschlossen ist. Sie können einen Bereich von Zeichen angeben, indem Sie einen Bindestrich verwenden, aber wenn der Bindestrich als erstes Zeichen nach dem ^ oder als letztes Zeichen in den eckigen Klammern erscheint, wird er als buchstäblicher Bindestrich aufgenommen eine normale Zeichenklasse. Zum Beispiel ist [^abc] dasselbe wie [^a-c]. Sie passen zuerst auf "o" in "bacon" und "h" in "chop".

Hinweis: Das ^ Zeichen kann auch den Anfang der Eingabe anzeigen.

.

Wildcard: Passt auf jedes einzelne Zeichen außer Zeilenabschlusszeichen: \n, \r, \u2028 oder \u2029. Zum Beispiel passt /.y/ zu "my" und "ay", aber nicht zu "yes" in "yes make my day", da vor "y" in "yes" kein Zeichen vorhanden ist. Wenn das dotAll (s) Flag gesetzt ist, passt es auch auf Zeilenabschlusszeichen. Innerhalb einer Zeichenklasse verliert der Punkt seine spezielle Bedeutung und passt auf einen buchstäblichen Punkt.

\d

Ziffern-Zeichenklassen-Escape: Passt auf jede Ziffer (arabische Zahl). Entspricht [0-9]. Zum Beispiel passt /\d/ oder /[0-9]/ zum "2" in "B2 is the suite number".

\D

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

\w

Wort-Zeichenklassen-Escape: Passt auf jedes alphanumerische Zeichen aus dem Basis-Latein-Alphabet, einschließlich des Unterstrichs. Entspricht [A-Za-z0-9_]. Zum Beispiel passt /\w/ auf "a" in "apple", "5" in "$5.28", "3" in "3D" und "m" in "Émanuel".

\W

Nicht-Wort-Zeichenklassen-Escape: Passt zu jedem Zeichen, das kein Wortzeichen aus dem Basis-Latein-Alphabet ist. Entspricht [^A-Za-z0-9_]. Zum Beispiel passt /\W/ oder /[^A-Za-z0-9_]/ auf "%" in "50%" und "É" in "Émanuel".

\s

Leerzeichen-Zeichenklassen-Escape: Passt auf ein einzelnes Leerzeichen-Zeichen, einschließlich Leerzeichen, Tabulator, Form Feed, Zeilenumbruch und andere Unicode-Leerzeichen. Entspricht [\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Zum Beispiel passt /\s\w*/ auf " bar" in "foo bar".

\S

Nicht-Leerzeichen-Zeichenklassen-Escape: Passt auf ein einzelnes Zeichen, das kein Leerzeichen ist. Entspricht [^\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]. Zum Beispiel passt /\S\w*/ auf "foo" in "foo bar".

\t Passt auf einen horizontalen Tabulator.
\r Passt auf einen Zeilenumbruch.
\n Passt auf einen Zeilenumbruch.
\v Passt auf eine vertikale Tabulator.
\f Passt auf ein Form Feed.
[\b] Passt auf ein Backspace. Wenn Sie nach der Wortgrenzen-Assertion (\b) suchen, siehe Assertions.
\0 Passt auf ein NUL-Zeichen. Folgen Sie diesem nicht mit einer weiteren Ziffer.
\cX

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

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

Unicode-Zeichenklassen-Escape: Passt auf ein Zeichen basierend auf seinen Unicode-Zeichen-Eigenschaften: zum Beispiel, Emoji-Zeichen, oder japanische katakana Zeichen, oder chinesische/japanische Han/Kanji-Zeichen, usw.).

\

Gibt an, dass das folgende Zeichen speziell behandelt oder "escaped" werden sollte. Es verhält sich auf eine von zwei Arten.

  • Für Zeichen, die normalerweise wörtlich behandelt werden, gibt es an, dass das nächste Zeichen speziell ist und nicht wörtlich interpretiert werden sollte. Zum Beispiel passt /b/ zum Zeichen "b". Durch das Setzen eines Backslashes vor "b", dh durch die Verwendung von /\b/, wird das Zeichen speziell, um eine Wortgrenze zu bedeuten.
  • Für Zeichen, die normalerweise speziell behandelt werden, gibt es an, dass das nächste Zeichen nicht speziell ist und wörtlich interpretiert werden sollte. 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 passen, setzen Sie einen Backslash davor; zum Beispiel passt /a\*/ auf "a*".

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

x|y

Disjunktion: Passt zu "x" oder "y". Jedes Element, getrennt durch ein Pipe-Symbol (|), wird als Alternative bezeichnet. Zum Beispiel passt /green|red/ auf "green" in "green apple" und auf "red" in "red apple".

Hinweis: Eine Disjunktion ist ein weiterer Weg, ein "Set von Wahlmöglichkeiten" anzugeben, ist aber 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 zu (?:a|b|c).

Assertions

Assertions beinhalten Grenzmarkierungen, die Anfänge und Enden von Zeilen und Wörtern anzeigen, sowie andere Muster, die auf irgendeine Weise anzeigen, dass eine Übereinstimmung möglich ist (einschließlich Look-ahead, Look-behind und bedingten Ausdrücken).

Grenzmarkierungs-Assertions

Zeichen Bedeutung
^

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

Hinweis: Dieses Zeichen hat eine andere Bedeutung, wenn es am Anfang einer Zeichenklasse erscheint.

$

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

\b

Wortgrenze-Assertion: Passt zu einer Wortgrenze. Dies ist die Position, an der ein Wortzeichen nicht von einem anderen Wortzeichen gefolgt oder vorhergegangen wird, zum Beispiel zwischen einem Buchstaben und einem Leerzeichen. Beachten Sie, dass eine übereinstimmende Wortgrenze nicht in der Übereinstimmung enthalten ist. Mit anderen Worten, die Länge einer übereinstimmenden Wortgrenze ist null.

Beispiele:

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

Um ein Backspace-Zeichen ([\b]) zu matchen, siehe Zeichenklassen.

\B

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

Andere Assertions

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

Zeichen Bedeutung
x(?=y)

Lookahead-Assertion: Passt zu "x" nur dann, wenn "x" von "y" gefolgt wird. Zum Beispiel passt /Jack(?=Sprat)/ zu "Jack" nur dann, wenn es von "Sprat" gefolgt wird.
/Jack(?=Sprat|Frost)/ passt zu "Jack" nur dann, wenn es von "Sprat" oder "Frost" gefolgt wird. Jedoch sind weder "Sprat" noch "Frost" Teil der Übereinstimmungs-Ergebnisse.

x(?!y)

Negative Lookahead-Assertion: Passt zu "x" nur dann, wenn "x" nicht von "y" gefolgt wird. Zum Beispiel passt /\d+(?!\.)/ zu einer Zahl nur dann, wenn sie 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 dann, wenn "x" von "y" vorhergegangen wird. Zum Beispiel, /(?<=Jack)Sprat/ passt zu "Sprat" nur dann, wenn es von "Jack" vorhergegangen wird. /(?<=Jack|Tom)Sprat/ passt zu "Sprat" nur dann, wenn es von "Jack" oder "Tom" vorhergegangen wird. Jedoch sind weder "Jack" noch "Tom" Teil der Übereinstimmungs-Ergebnisse.

(?<!y)x

Negative Lookbehind-Assertion: Passt zu "x" nur dann, wenn "x" nicht von "y" vorhergegangen wird. Zum Beispiel, /(?<!-)\d+/ passt zu einer Zahl nur dann, wenn sie nicht von einem Minuszeichen vorhergegangen wird. /(?<!-)\d+/.exec('3') passt zu "3". /(?<!-)\d+/.exec('-3') findet keine Übereinstimmung, da die Zahl von dem Minuszeichen vorhergegangen wird.

Gruppen und Rückverweise

Gruppen und Rückverweise zeigen Gruppen von Ausdruckszeichen an.

Zeichen Bedeutung
(x)

Erfassungsgruppe: Passt zu x und merkt sich die Übereinstimmung. Zum Beispiel passt /(foo)/ zu "foo" in "foo bar" und merkt sich diesen.

Ein regulärer Ausdruck kann mehrere Erfassungsgruppen haben. In den Ergebnissen werden Übereinstimmungen zu Erfassungsgruppen typischerweise in einem Array gespeichert, dessen Mitglieder in der gleichen Reihenfolge wie die linken Klammern in der Erfassungsgruppe sind. Dies ist normalerweise einfach die Reihenfolge der Erfassungsgruppen selbst. Dies wird wichtig, wenn Erfassungsgruppen geschachtelt sind. Übereinstimmungen werden mit dem Index der Elemente der Ergebnisse ([1], …, [n]) oder von den vordefinierten Eigenschaften des RegExp-Objekts ($1, …, $9) abgerufen.

Erfassungsgruppen haben einen Leistungseinbruch. Wenn Sie den übereinstimmenden Teilstring nicht abrufen müssen, bevorzugen Sie nicht-erfassende 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 Übereinstimmungen zu erhalten.

(?<Name>x)

Benannte Erfassungsgruppe: Passt zu "x" und speichert es unter dem Namen, der von <Name> angegeben wird, in der Gruppen-Eigenschaft der zurückgegebenen Übereinstimmungen. Die spitzen Klammern (< und >) sind für den Gruppennamen erforderlich.

Zum Beispiel, um die Vorwahl der USA aus einer Telefonnummer zu extrahieren, könnten wir /\((?<area>\d\d\d)\)/ verwenden. Die resultierende Nummer würde unter matches.groups.area erscheinen.

(?:x)

Nicht-erfassende Gruppe: Passt zu "x", merkt sich die Übereinstimmung jedoch nicht. Der übereinstimmende Teilstring kann nicht von den Elementen des resultierenden Arrays ([1], …, [n]) oder von den vordefinierten Eigenschaften des RegExp-Objekts ($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: Wo "n" eine positive ganze Zahl ist. Passt zu demselben Teilstring, der von der n-ten erfassten Gruppe im regulären Ausdruck (Start mit den linken Klammern) übereinstimmt. Zum Beispiel, /apple(,)\sorange\1/ passt zu "apple, orange," in "apple, orange, cherry, peach".

\k<Name>

Benannter Rückverweis: Ein Rückverweis auf den letzten Teilstring, der mit der benannten Erfassungsgruppe übereinstimmt, die durch <Name> angegeben wird.

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 Beginn eines Rückverweises auf eine benannte Erfassungsgruppe anzugeben.

Quantifizierer

Quantifizierer geben die Anzahl der Zeichen oder Ausdrücke an, die übereinstimmen sollen.

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

Zeichen Bedeutung
x*

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

x+

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

x?

Passt auf das vorangehende Element "x" 0 oder 1 Mal. Zum Beispiel passt /e?le?/ zum "el" in "angel" und zum "le" in "angle."

Wenn es unmittelbar nach einem der Quantifizierer *, +, ? oder {} verwendet wird, macht es den Quantifizierer nicht-gierig (d.h. er passt auf die minimale Anzahl der Male), im Gegensatz zum Standard, der gierig ist (d.h. die maximale Anzahl der Male passt).

x{n}

Wo "n" eine nicht-negative ganze Zahl ist, passt genau "n" Vorkommen des vorangehenden Elements "x". Zum Beispiel passt /a{2}/ nicht zum "a" in "candy", aber es passt zu allen "a"s in "caandy" und zu den ersten beiden "a"s in "caaandy".

x{n,}

Wo "n" eine nicht-negative ganze Zahl ist, passt auf mindestens "n" Vorkommen des vorangehenden Elements "x". Zum Beispiel passt /a{2,}/ nicht zum "a" in "candy", passt aber zu allen "a"s in "caandy" und "caaaaaaandy".

x{n,m}

Wo "n" und "m" nicht-negative ganze Zahlen sind und m >= n, passt auf mindestens "n" und höchstens "m" Vorkommen des vorangehenden Elements "x". Zum Beispiel passt /a{1,3}/ auf nichts in "cndy", auf das "a" in "candy", auf die zwei "a"s in "caandy" und auf die ersten drei "a"s in "caaaaaaandy". Beachten Sie, dass, wenn Sie "caaaaaaandy" abgleichen, die Übereinstimmung "aaa" ist, obwohl die ursprüngliche Zeichenfolge mehr "a"s in sich hatte.

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

Standardmäßig sind Quantifizierer wie * und + "gierig", das heißt, sie versuchen, so oft wie möglich übereinzustimmen. Das ? Zeichen nach dem Quantifizierer macht den Quantifizierer "nicht-gierig": Das bedeutet, dass er aufhört, sobald er die minimale Anzahl von Übereinstimmungen gefunden hat. Zum Beispiel, bei einem Text wie "some <foo> <bar> new </bar> </foo> thing":

  • /<.*>/ wird "<foo> <bar> new </bar> </foo>" übereinstimmen.
  • /<.*?>/ wird "<foo>" übereinstimmen.

Hinweis: Das Hinzufügen von ? nach {n} ist syntaktisch gültig, aber praktisch nutzlos. Da {n} immer genau n-mal übereinstimmt, verhält sich x{n}? genauso wie x{n}.