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

View in English Always switch to English

Syntax-Schummelzettel für reguläre Ausdrücke

Diese Seite bietet einen umfassenden Schummelzettel zu allen Fähigkeiten der RegExp-Syntax, indem sie den Inhalt der Artikel im RegExp-Leitfaden zusammenfasst. Falls Sie mehr Informationen zu einem bestimmten Thema benötigen, folgen Sie bitte dem Link in der entsprechenden Überschrift, um den vollständigen Artikel zu erreichen oder besuchen Sie den Leitfaden.

Zeichenklassen

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

Zeichen Bedeutung
[xyz]
[a-c]

Zeichenklasse: Passt zu einem der eingeschlossenen Zeichen. Sie können einen Bereich von Zeichen mit einem Bindestrich angeben, aber wenn der Bindestrich als erstes oder letztes Zeichen in den eckigen Klammern erscheint, wird er als literaler Bindestrich verstanden, der in die Zeichenklasse als normales Zeichen aufgenommen wird.

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

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

Zum Beispiel entspricht [\w-] dem gleichen wie [A-Za-z0-9_-]. Beide passen zu "b" in "brisket", "c" in "chop" und "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 mit einem Bindestrich angeben, aber wenn der Bindestrich als erstes Zeichen nach dem ^ oder als letztes Zeichen in den eckigen Klammern erscheint, wird er als literaler Bindestrich verstanden, der in die Zeichenklasse als normales Zeichen aufgenommen wird. Zum Beispiel ist [^abc] dasselbe wie [^a-c]. Sie passen zunächst zu "o" in "bacon" und "h" in "chop".

Hinweis: Das ^-Zeichen kann auch für den Anfang der Eingabe stehen.

.

Wildcard: Passt zu jedem einzelnen Zeichen außer Zeilenendzeichen: \n, \r, \u2028 oder \u2029. Zum Beispiel passt /.y/ zu "my" und "ay", aber nicht "yes", in "yes make my day", da es kein Zeichen vor "y" in "yes" gibt. Wenn das dotAll (s) Flag gesetzt ist, werden auch Zeilenendzeichen einbezogen. Innerhalb einer Zeichenklasse verliert der Punkt seine besondere Bedeutung und passt zu einem literalen Punkt.

\d

Ziffern-Zeichenklasse-Escape: Passt zu jeder Ziffer (arabische Ziffern). Entspricht [0-9]. Zum Beispiel passt /\d/ oder /[0-9]/ zu "2" in "B2 ist die Suite-Nummer".

\D

Nicht-Ziffern-Zeichenklasse-Escape: Passt zu jedem Zeichen, das keine Ziffer (arabische Ziffern) ist. Entspricht [^0-9]. Zum Beispiel passt /\D/ oder /[^0-9]/ zu "B" in "B2 ist die Suite-Nummer".

\w

Wort-Zeichenklasse-Escape: Passt zu jedem alphanumerischen Zeichen aus dem lateinischen Alphabet, einschließlich des Unterstrichs. Entspricht [A-Za-z0-9_]. Zum Beispiel passt /\w/ zu "a" in "apple", "5" in "$5.28", "3" in "3D" und "m" in "Émanuel".

\W

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

\s

Leerzeichen-Zeichenklasse-Escape: Passt zu einem einzelnen Leerzeichenzeichen, einschließlich Leerzeichen, Tabulator, Form Feed, Zeilen Feed und anderen Unicode-Leerzeichen. 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-Leerzeichen-Zeichenklasse-Escape: Passt zu einem einzelnen 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*/ zu "foo" in "foo bar".

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

Entspricht einem 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 entspricht /\cM\cJ/ einem "\r\n".

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

Unicode-Zeichenklasse-Escape: Passt zu einem Zeichen basierend auf seinen Unicode-Zeicheneigenschaften: zum Beispiel Emoji-Zeichen oder japanische Katakana-Zeichen oder chinesische/japanische Han/Kanji-Zeichen, etc.).

\

Gibt an, dass das folgende Zeichen besonders behandelt oder "escaped" werden soll. Es verhält sich auf zwei Arten.

  • Für Zeichen, die normalerweise wörtlich genommen werden, gibt an, dass das nächste Zeichen besonders ist und nicht wörtlich interpretiert werden soll. Zum Beispiel passt /b/ zu dem Zeichen "b". Indem ein Backslash vor "b" gesetzt wird, das heißt durch Verwendung von /\b/, wird das Zeichen speziell, um eine Wortgrenze zu bedeuten.
  • Für Zeichen, die normalerweise besonders behandelt werden, gibt 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 vorherigen Zeichens übereinstimmen sollen; zum Beispiel bedeutet /a*/, dass 0 oder mehr "a"s übereinstimmen. Um * wörtlich zu erfassen, setzen Sie einen Backslash davor; zum Beispiel passt /a\*/ zu "a*".

Hinweis: Um dieses Zeichen wörtlich zu erfassen, escapen 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 einen Pipe (|) getrennt ist, wird als Alternative bezeichnet. Zum Beispiel, /green|red/ passt zu "green" in "green apple" und "red" in "red apple".

Hinweis: Eine Disjunktion ist eine andere Möglichkeit, "eine Reihe von Optionen" anzugeben, aber es ist keine Zeichenklasse. Disjunktionen sind keine Atome — Sie müssen eine Gruppe verwenden, um sie zu einem größeren Muster zu machen. [abc] ist funktional äquivalent zu (?:a|b|c).

Behauptungen

Behauptungen umfassen Grenzen, die 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).

Grenzbezogene Behauptungen

Zeichen Bedeutung
^

Eingangsgrenze-Anfangsbehauptung: Passt zum Beginn 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.

$

Eingangsgrenze-Endebehauptung: 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 in "eat".

\b

Wortgrenzenbehauptung: Passt zu einer Wortgrenze. Dies ist die Position, an der ein Wortzeichen nicht von einem anderen Wortzeichen gefolgt oder davor steht, wie zwischen einem Buchstaben und einem Leerzeichen. Beachten Sie, dass eine passende Wortgrenze nicht im Match enthalten ist. Mit anderen Worten, die Länge einer passenden Wortgrenze ist null.

Beispiele:

  • /\bm/ passt zum "m" in "moon".
  • /oo\b/ passt nicht zum "oo" in "moon", da "oo" von "n" gefolgt wird, was ein Wortzeichen ist.
  • /oon\b/ passt zum "oon" in "moon", da "oon" das Ende des Strings ist, also nicht von einem Wortzeichen gefolgt wird.
  • /\w\b\w/ wird niemals zu etwas passen, da ein Wortzeichen niemals sowohl von einem Nicht-Wort als auch einem Wortzeichen gefolgt sein kann.

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

\B

Nicht-Wortgrenzenbehauptung: Passt zu einer Nicht-Wortgrenze. Dies ist eine Position, bei 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 eines Strings werden als Nicht-Wörter betrachtet. Ebenso wird die passende Nicht-Wortgrenze nicht im Match enthalten sein. Zum Beispiel passt /\Bon/ zu "on" in "at noon", und /ye\B/ passt zu "ye" in "possibly yesterday".

Andere Behauptungen

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

Zeichen Bedeutung
x(?=y)

Lookahead-Behauptung: Passt zu "x", nur wenn "x" von "y" gefolgt wird. Zum Beispiel passt /Jack(?=Sprat)/ zu "Jack", nur wenn es von "Sprat" gefolgt wird.
/Jack(?=Sprat|Frost)/ passt zu "Jack", nur wenn es von "Sprat" oder "Frost" gefolgt wird. Allerdings sind weder "Sprat" noch "Frost" Teil der Matchergebnisse.

x(?!y)

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

(?<=y)x

Lookbehind-Behauptung: Passt zu "x", nur wenn "x" von "y" vorausgegangen wird. Zum Beispiel passt /(?<=Jack)Sprat/ zu "Sprat", nur wenn es von "Jack" vorausgegangen wird. /(?<=Jack|Tom)Sprat/ passt zu "Sprat", nur wenn es von "Jack" oder "Tom" vorausgegangen wird. Allerdings sind weder "Jack" noch "Tom" Teil der Matchergebnisse.

(?<!y)x

Negative Lookbehind-Behauptung: Passt zu "x", nur wenn "x" nicht von "y" vorausgegangen wird. Zum Beispiel passt /(?<!-)\d+/ zu einer Zahl, nur wenn sie nicht von einem Minuszeichen vorausgegangen wird. /(?<!-)\d+/.exec('3') passt zu "3". /(?<!-)\d+/.exec('-3') es wird kein Treffer gefunden, da die Zahl von einem Minuszeichen vorausgegangen wird.

Gruppen und Rückverweise

Gruppen und Rückverweise kennzeichnen Gruppen von Ausdruckszeichen.

Zeichen Bedeutung
(x)

Capturing-Group: Passt zu x und merkt sich das Match. Zum Beispiel passt /(foo)/ zu "foo" in "foo bar".

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

Capturing-Groups haben einen Leistungseinbruch. Wenn Sie den gematchten Unterstring nicht abrufen müssen, verwenden Sie lieber 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)

Named Capturing-Group: Passt zu "x" und speichert es im Gruppen-Eigenschaft der zurückgegebenen Matches unter dem angegebenen Namen <Name>. Die spitzen Klammern (< und >) sind für den Gruppennamen erforderlich.

Zum Beispiel, um den Gebietscode der Vereinigten Staaten 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 aber nicht das Match. Der gematchte Unterstring 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 Flags i, m und s können in einem Modifier verwendet werden.

\n

Rückverweis: Wobei "n" eine positive ganze Zahl ist. Passt zu demselben Unterstring, der von der nth-Capturing-Group im regulären Ausdruck gematched wurde (Anzahl der linken Klammern). Zum Beispiel, /apple(,)\sorange\1/ passt zu "apple, orange," in "apple, orange, cherry, peach".

\k<Name>

Named Rückverweis: Ein Rückverweis auf den letzten Unterstring, der von der Named Capturing-Group mit <Name> spezifiziert wurde.

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 Named Capturing-Group anzuzeigen.

Quantifizierer

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

Hinweis: Im Folgenden bezieht sich Element nicht nur auf einzelne Zeichen, sondern schließt auch Zeichenklassen sowie Gruppen und Rückverweise ein.

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+/ zum "a" in "candy" und zu allen "a"s in "caaaaaaandy".

x?

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

Wenn es unmittelbar nach einem der Quantifizierer *, +, ? oder {} verwendet wird, macht es den Quantifizierer nicht-gierig (entsprechend der minimalen Anzahl von Malen), im Gegensatz zum Standard, der gierig ist (entsprechend der maximalen Anzahl von Malen).

x{n}

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

x{n,}

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

x{n,m}

Wobei "n" und "m" nicht-negative ganze Zahlen und m >= n sind, passt mindestens "n" und höchstens "m" Vorkommen des vorhergehenden Elements "x". Zum Beispiel passt /a{1,3}/ zu nichts in "cndy", zum "a" in "candy", zu den zwei "a"s in "caandy", und zu den ersten drei "a"s in "caaaaaaandy". Beachten Sie, dass beim Matchen "caaaaaaandy" das Match "aaa" ist, obwohl der ursprüngliche String mehr "a"s enthält.

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

Standardmäßig sind Quantifizierer wie * und + "gierig", was bedeutet, dass sie versuchen, so oft wie möglich zu matchen. Das ? Zeichen nach dem Quantifizierer macht den Quantifizierer "nicht-gierig": Das bedeutet, dass es so schnell wie möglich aufhört, wenn es die minimale Anzahl von Matches gefunden hat. Zum Beispiel, bei einem String wie "some <foo> <bar> new </bar> </foo> thing":

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

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