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

View in English Always switch to English

Regular Expression Syntax Cheat Sheet

Diese Seite bietet eine umfassende Übersicht über alle 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, folgen Sie bitte dem Link in der entsprechenden Überschrift, um den vollständigen Artikel zu lesen, oder besuchen Sie den Leitfaden.

Zeichenklassen

Zeichenklassen unterscheiden Arten von Zeichen, wie zum Beispiel das Unterscheiden zwischen 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, aber wenn der Bindestrich als erstes oder letztes Zeichen in den eckigen Klammern erscheint, wird er als ein literaler Bindestrich betrachtet, der in die Zeichenklasse als normales Zeichen aufgenommen wird.

Zum Beispiel ist [abcd] dasselbe wie [a-d]. Beide 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 auf alles, was nicht in den eckigen Klammern enthalten 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 ein literaler Bindestrich betrachtet, der in die Zeichenklasse als normales Zeichen aufgenommen wird. Zum Beispiel ist [^abc] dasselbe wie [^a-c]. Beide passen anfangs zum "o" in "bacon" und zum "h" in "chop".

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

.

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

\d

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

\D

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

\w

Wort-Zeichenklasse Escape: Passt zu jedem alphanumerischen Zeichen des Grund-Alphabets (Latein), 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-Wort-Zeichenklasse Escape: Passt zu jedem Zeichen, das kein Wort-Zeichen des grundlegenden Lateinalphabets ist. Entspricht [^A-Za-z0-9_]. Zum Beispiel passt /\W/ oder /[^A-Za-z0-9_]/ zum "%" in "50%" und "É" in "Émanuel".

\s

Whitespace-Zeichenklasse Escape: Passt zu einem einzelnen Whitespace-Zeichen, einschließlich Leerzeichen, Tab, Form Feed, Zeilenumbruch 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*/ zum " bar" in "foo bar".

\S

Nicht-Whitespace-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*/ zum "foo" in "foo bar".

\t Passt zu einem horizontalen Tabulator.
\r Passt zu einem Wagenrücklauf (Carriage Return).
\n Passt zu einem Zeilenumbruch.
\v Passt zu einem vertikalen Tabulator.
\f Passt zu einem Form-Feed.
[\b] Passt zu einem Backspace. Wenn Sie nach der Wortgrenzen-Bestätigung (\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 von Caret-Notation, wobei "X" ein Buchstabe von A–Z oder a–z ist (entspricht Codepunkten U+0001U+001A). Zum Beispiel, /\cM\cJ/ passt zu "\r\n".

\xhh Hex Escape: Passt zum Zeichen mit dem Code hh (zwei hexadezimale Ziffern).
\uHHHH Unicode Escape: Passt zu einer UTF-16 Code-Einheit mit dem Wert HHHH (vier hexadezimale Ziffern).
\u{H…H} Unicode Code Point Escape: (Nur wenn das u Flag gesetzt ist.) Passt zum Zeichen mit dem Unicode-Wert U+H…H (1 bis 6 hexadezimale Ziffern).
\p{UnicodeProperty}, \P{UnicodeProperty}

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

\

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

  • Für Zeichen, die normalerweise wörtlich behandelt werden, gibt an, dass das nächste Zeichen speziell ist und nicht wörtlich interpretiert werden soll. Zum Beispiel passt /b/ zum Charakter "b". Durch Einfügen eines Backslashs vor "b", also durch Verwenden von /\b/, wird das Zeichen speziell, um eine Wortgrenze anzuzeigen.
  • Für Zeichen, die normalerweise speziell behandelt werden, gibt an, dass das nächste Zeichen nicht besonders ist und wörtlich interpretiert werden soll. Zum Beispiel ist "*" ein spezielles Zeichen, das bedeutet, dass 0 oder mehr Vorkommen des vorhergehenden Zeichens abgeglichen werden sollten; zum Beispiel bedeutet /a*/, dass 0 oder mehr "a"s abgeglichen werden. Um * wörtlich abzugleichen, gehen Sie ihm einen Rückschrägstrich voran; zum Beispiel passt /a\*/ zu "a*".

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

x|y

Disjunktion: Passt entweder zu "x" oder zu "y". Jede Komponente, die durch ein Pipe-Zeichen (|) 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 Auswahlmöglichkeiten" zu spezifizieren, 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 funktional gleichwertig mit (?:a|b|c).

Assertions

Assertions umfassen Grenzen, die den Anfang und das Ende von Zeilen und Wörtern anzeigen, und andere Muster, die auf irgendeine Weise angeben, dass ein Abgleich möglich ist (einschließlich Look-Ahead, Look-Behind und bedingter Ausdrücke).

Grenztyp-Assertions

Zeichen Bedeutung
^

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

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

$

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

\b

Wortgrenzen-Assertion: Passt zu einer Wortgrenze. Dies ist die Position, an der ein Wortzeichen nicht von einem anderen Wortzeichen gefolgt oder vorangegangen wird, wie zwischen einem Buchstaben und einem Leerzeichen. Beachten Sie, dass eine übereinstimmende Wortgrenze nicht im Match enthalten ist. Anders ausgedrückt, die Länge einer übereinstimmenden Wortgrenze ist Null.

Beispiele:

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

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

\B

Nicht-Wortgrenzen-Assertion: Passt zu einer Nicht-Wortgrenze. Dies ist eine Position, an der das vorherige und nächste Zeichen vom gleichen Typ sind: Entweder müssen beide Worte sein, oder beide müssen Nicht-Worte sein, zum Beispiel zwischen zwei Buchstaben oder zwischen zwei Leerzeichen. Der Anfang und das Ende einer Zeichenfolge werden als Nicht-Wörter betrachtet. Genauso wie die übereinstimmende Wortgrenze ist die übereinstimmende Nicht-Wortgrenze auch nicht im Match 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 Quantifikator verwendet werden.

Zeichen Bedeutung
x(?=y)

Lookahead-Assertion: 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 des Matchergebnisses.

x(?!y)

Negative Lookahead-Assertion: 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-Assertion: Passt zu "x", nur wenn "x" von "y" vorausgeht. Zum Beispiel, /(?<=Jack)Sprat/ passt zu "Sprat", nur wenn es von "Jack" vorausgeht. /(?<=Jack|Tom)Sprat/ passt zu "Sprat", nur wenn es von "Jack" oder "Tom" vorausgeht. Allerdings sind weder "Jack" noch "Tom" Teil des Matchergebnisses.

(?<!y)x

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

Gruppen und Rückbezüge

Gruppen und Rückbezüge kennzeichnen Gruppen von Ausdruckszeichen.

Zeichen Bedeutung
(x)

Gruppe erkennbar aufnehmen: Passt zu x und merkt sich den Match. Zum Beispiel passt /(foo)/ und merkt sich "foo" in "foo bar".

Ein regulärer Ausdruck kann mehrere erfassende Gruppen haben. In Ergebnissen, werden Übereinstimmungen mit erfassenden Gruppen typischerweise in einem Array angezeigt, dessen Mitglieder in der gleichen Reihenfolge sind wie die linken Klammern in der erfassenden Gruppe. Dies ist normalerweise einfach die Reihenfolge der erfassenden Gruppen selbst. Dies wird wichtig, wenn erfassende Gruppen verschachtelt sind. Übereinstimmungen werden über den Index der Elemente des Ergebnisses zugegriffen ([1], …, [n]) oder über die vordefinierten Eigenschaften des RegExp-Objekts ($1, …, $9).

Erfassen von Gruppen hat eine Leistungseinbuße. Wenn Sie den erfassten Unterstring nicht erneut abrufen müssen, bevorzugen Sie nicht-erfassende Klammern (siehe unten).

String.prototype.match() wird Gruppen nicht zurückgeben, wenn das /.../g Flag gesetzt ist. Sie können jedoch trotzdem String.prototype.matchAll() verwenden, um alle Übereinstimmungen zu erhalten.

(?<Name>x)

Benannte erfassende Gruppe: Passt zu "x" und speichert es in der "groups"-Eigenschaft der zurückgegebenen Übereinstimmungen unter dem angegebenen Namen durch <Name>. Die spitzen Klammern (< und >) sind für die Gruppennamen erforderlich.

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

(?:x)

Nicht-erfassende Gruppe: Passt zu "x", merkt sich aber den Match nicht. Die übereinstimmende Teilzeichenfolge kann nicht aus dem resultierenden Array der Elemente zurückgerufen werden ([1], …, [n]) oder aus den vordefinierten Eigenschaften des RegExp-Objekts ($1, …, $9).

(?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ückbezug: Wo "n" eine positive Ganzzahl ist. Passt dieselbe Teilzeichenfolge, die von der n-ten erfassenden Gruppe im regulären Ausdruck (zählend von links nach rechts) erfasst wurde. Zum Beispiel, /apple(,)\sorange\1/ passt zu "apple, orange," in "apple, orange, cherry, peach".

\k<Name>

Benannter Rückbezug: Ein Rückbezug auf die letzte übereinstimmende Teilzeichenfolge der Benannten erfassenden Gruppe festgelegt durch <Name>.

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ückbezugs auf eine benannte erfassende Gruppe anzuzeigen.

Quantifizierer

Quantifizierer geben die Anzahl von Zeichen oder Ausdrücken an, die abgeglichen werden sollen.

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

Zeichen Bedeutung
x*

Passt das vorhergehende Element "x" 0 oder mehr Mal. 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 mehr Mal. Entspricht {1,}. Zum Beispiel passt /a+/ zu der "a" in "candy" und 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 "le" in "angle."

Wenn direkt nach einem der Quantifizierer *, +, ?, oder {} verwendet, macht es den Quantifizierer nicht-gierig (passt die minimale Anzahl von Malen), im Gegensatz zu dem Standard, der gierig ist (passt die maximale Anzahl von Malen).

x{n}

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

x{n,}

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

x{n,m}

Wo "n" und "m" nicht-negative Ganzzahlen sind 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 Anpassen von "caaaaaaandy", das Match "aaa" ist, obwohl die ursprüngliche Zeichenfolge mehr "a"s darin hatte.

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 passen. Das ? Zeichen nach dem Quantifizierer macht den Quantifizierer "nicht-gierig": was bedeutet, dass es stoppt, sobald es die minimale Anzahl von Übereinstimmungen findet. Zum Beispiel, bei einer Zeichenfolge wie "some <foo> <bar> new </bar> </foo> thing":

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

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