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

View in English Always switch to English

Kurzübersicht der regulären Ausdrücke

Diese Seite bietet eine umfassende Kurzübersicht über alle Möglichkeiten der RegExp-Syntax, indem die Inhalte der Artikel im RegExp-Leitfaden zusammengefasst werden. 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, beispielsweise die Unterscheidung zwischen Buchstaben und Ziffern.

Zeichen Bedeutung
[xyz]
[a-c]

Zeichenklasse: Passt auf eines 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 literale Zeichen angesehen, das in die Zeichenklasse als normales Zeichen aufgenommen wird.

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

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

Zum Beispiel, [\w-] ist das gleiche wie [A-Za-z0-9_-]. Sie passen beide auf das "b" in "brisket", das "c" in "chop", und das "n" in "non-profit".

[^xyz]
[^a-c]

Negierte Zeichenklasse: Passt auf alles, 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 literale Zeichen angesehen, das in die Zeichenklasse als normales Zeichen aufgenommen wird. Zum Beispiel, [^abc] ist das gleiche wie [^a-c]. Sie passen 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 Zeilenendzeichen: \n, \r, \u2028 oder \u2029. Zum Beispiel passt /.y/ auf "my" und "ay", aber nicht auf "yes", in "yes make my day", da es kein Zeichen vor "y" in "yes" gibt. Wenn das dotAll (s)-Flag aktiviert ist, passt es auch auf Zeilenendzeichen. Innerhalb einer Zeichenklasse verliert der Punkt seine spezielle Bedeutung und passt auf einen literalen Punkt.

\d

Ziffernzeichenklassen-Escape: Passt auf jede Ziffer (arabische Zahl). Entspricht [0-9]. Zum Beispiel passt /\d/ oder /[0-9]/ auf "2" in "B2 ist die Suite-Nummer".

\D

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

\w

Wortzeichenklassen-Escape: Passt auf jedes alphanumerische Zeichen des grundlegenden lateinischen Alphabets, 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-Wortzeichenklassen-Escape: Passt auf jedes Zeichen, das kein Wortzeichen des grundlegenden lateinischen Alphabets ist. Entspricht [^A-Za-z0-9_]. Zum Beispiel, passt /\W/ oder /[^A-Za-z0-9_]/ auf "%" in "50%" und "É" in "Émanuel".

\s

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

\S

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

\t Passt auf einen horizontalen Tabulator.
\r Passt auf einen Wagenrücklauf.
\n Passt auf einen Zeilenumbruch.
\v Passt auf einen vertikalen Tabulator.
\f Passt auf einen Formularvorschub.
[\b] Passt auf einen Rückschritt. Wenn Sie nach dem 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 mit Hilfe der Caret-Notation, wobei "X" ein Buchstabe von A bis Z oder a bis z ist (entspricht den Codepunkten U+0001U+001A). Zum Beispiel, /\cM\cJ/ passt auf "\r\n".

\xhh Hex-Escape: Passt auf das Zeichen mit dem Code hh (zwei hexadezimale Ziffern).
\uHHHH Unicode-Escape: Passt auf eine UTF-16 Code-Einheit mit dem Wert HHHH (vier hexadezimale Ziffern).
\u{H…H} Unicode-Codepunkt-Escape: Passt auf das Zeichen mit dem Unicode-Wert U+H…H (1 bis 6 hexadezimale Ziffern). Nur gültig im unicode-bewussten Modus.
\p{UnicodeProperty}, \P{UnicodeProperty}

Unicode-Zeichenklassen-Escape: Passt auf ein Zeichen basierend auf seinen Unicode-Zeicheneigenschaften: zum Beispiel, Emoji-Zeichen oder japanische Katakana-Zeichen, oder chinesische/japanische Han/Kanji-Zeichen, usw.). Nur gültig im unicode-bewussten Modus.

\

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

  • Für Zeichen, die normalerweise wörtlich behandelt werden, zeigt an, dass das nächste Zeichen speziell ist und nicht wörtlich interpretiert werden soll. Zum Beispiel passt /b/ auf das Zeichen "b". Indem ein Backslash vor "b" gesetzt wird, wird /\b/, das Zeichen wird speziell, um eine Wortgrenze zu bedeuten.
  • Für Zeichen, die normalerweise speziell behandelt werden, zeigt 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 passen sollen; zum Beispiel bedeutet /a*/, dass 0 oder mehr "a's" passen. Um * wörtlich zu matchen, stellen Sie einen Backslash voran; zum Beispiel, /a\*/ passt auf "a*".

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

x|y

Disjunktion: Passt auf entweder "x" oder "y". Jedes Element, das von einer Pipe (|) getrennt wird, wird als Alternative bezeichnet. Zum Beispiel, /green|red/ passt auf "green" in "green apple" und "red" in "red apple".

Hinweis: Eine Disjunktion ist eine andere Möglichkeit, "eine Auswahlmenge" zu spezifizieren, aber es ist keine Zeichenklasse. Disjunktionen sind keine Atome — Sie müssen eine Gruppe verwenden, um sie Teil eines größeren Musters zu machen. [abc] ist funktional äquivalent zu (?: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 anzeigen, dass ein Match möglich ist (einschließlich Look-Ahead, Look-Behind und bedingten Ausdrücken).

Grenzen-basierte Assertions

Zeichen Bedeutung
^

Eingabebeginn Assertion: Passt auf den Beginn der Eingabe. Wenn das multiline (m)-Flag aktiviert ist, passt es auch unmittelbar nach einem Zeilenumbruch. Zum Beispiel, /^A/ passt nicht auf das "A" in "an A", aber es passt auf das erste "A" in "An A".

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

$

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

\A

Pufferbeginn Assertion: Passt auf den Beginn des gesamten Strings, unabhängig von der Anwesenheit des m-Flags. Nur gültig im unicode-bewussten Modus.

\z

Pufferende Assertion: Passt auf das Ende des gesamten Strings, unabhängig von der Anwesenheit des m-Flags. Nur gültig im unicode-bewussten Modus.

\Z

Pufferende Assertion mit optionalem Zeilenumbruch: Passt auf das Ende des gesamten Strings, erlaubt aber eine optionale abschließende Zeilenumbruchzeichenfolge (entweder ein Zeilenumbruch oder ein \r\n-Sequenz). Nur gültig im unicode-bewussten Modus.

\b

Wortgrenzen-Assertion: Passt auf eine Wortgrenze. Dies ist die Position, an der ein Wortzeichen nicht von einem anderen Wortzeichen gefolgt oder vorangegangen wird, wie zum Beispiel zwischen einem Buchstaben und einem Leerzeichen. Beachten Sie, dass eine gematchte Wortgrenze nicht Teil des Matches ist. Mit anderen Worten, die Länge einer gematchten Wortgrenze beträgt null.

Beispiele:

  • /\bm/ passt auf das "m" in "moon".
  • /oo\b/ passt nicht auf das "oo" in "moon", weil "oo" von "n" gefolgt wird, welches ein Wortzeichen ist.
  • /oon\b/ passt auf das "oon" in "moon", weil "oon" das Ende des Strings ist und somit nicht von einem Wortzeichen gefolgt wird.
  • /\w\b\w/ wird nie etwas matchen, da ein Wortzeichen nie sowohl von einem Nicht-Wort- als auch von einem Wortzeichen gefolgt sein kann.

Um auf ein Rückschritt-Zeichen ([\b]) zu matchen, siehe Zeichenklassen.

\B

Nicht-Wortgrenzen-Assertion: Passt auf eine Nicht-Wortgrenze. Dies ist eine Position, an der das vorherige und nächste Zeichen den gleichen Typ haben: 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. Genauso wie die gematchte Wortgrenze wird auch die gematchte Nicht-Wortgrenze nicht in das Match einbezogen. Zum Beispiel, /\Bon/ passt 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 auf "x" nur, wenn "x" von "y" gefolgt wird. Zum Beispiel, /Jack(?=Sprat)/ passt nur auf "Jack", wenn es von "Sprat" gefolgt wird.
/Jack(?=Sprat|Frost)/ passt nur auf "Jack", wenn es von "Sprat" oder "Frost" gefolgt wird. Allerdings ist weder "Sprat" noch "Frost" Teil der Matchergebnisse.

x(?!y)

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

(?<=y)x

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

(?<!y)x

Negative Lookbehind-Assertion: Passt auf "x" nur, wenn "x" nicht von "y" vorausgegangen wird. Zum Beispiel, /(?<!-)\d+/ passt nur auf eine Zahl, wenn sie nicht von einem Minuszeichen vorausgegangen wird. /(?<!-)\d+/.exec('3') passt auf "3". /(?<!-)\d+/.exec('-3') findet kein Match, weil die Zahl von dem Minuszeichen vorausgegangen wird.

Gruppen und Rückverweise

Gruppen und Rückverweise kennzeichnen Gruppen von Ausdruckszeichen.

Zeichen Bedeutung
(x)

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

Ein regulärer Ausdruck kann mehrere Capturing-Gruppen haben. In den Ergebnissen, Matches zu Capturing-Gruppen befinden sich typischerweise in einem Array, dessen Mitglieder in derselben Reihenfolge sind wie die linken Klammern in der Capturing-Gruppe. Dies ist normalerweise genau die Reihenfolge der Capturing-Gruppen selbst. Dies wird wichtig, wenn Capturing-Gruppen verschachtelt sind. Auf die Matches wird durch den Index der Elemente des Ergebnisses ([1], …, [n]) oder durch die vordefinierten RegExp-Objekt-Eigenschaften ($1, …, $9) zugegriffen.

Capturing-Gruppen haben einen Leistungsverlust. Wenn Sie die gematchte Zeichenfolge nicht wieder abrufen müssen, bevorzugen Sie nicht-capturing Klammern (siehe unten).

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

(?<Name>x)

Benannte Capturing-Gruppe: Passt auf "x" und speichert es in der Gruppeigenschaft der zurückgegebenen Matches unter dem Namen, der durch <Name> angegeben ist. Die spitzen Klammern (< und >) sind für den Gruppennamen erforderlich.

Zum Beispiel, um den US-Vorwahlbereich 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-Capturing-Gruppe: Passt auf "x", merkt sich aber nicht das Match. Die gematchte Zeichenfolge kann nicht aus den Elementen des resultierenden Arrays ([1], …, [n]) oder den vordefinierten RegExp-Objekt-Eigenschaften ($1, …, $9) abgerufen werden.

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

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

\n

Rückverweis: Wo "n" eine positive Ganzzahl ist. Passt auf die gleiche Zeichenfolge, die durch die n-te Capturing-Gruppe im regulären Ausdruck gematcht wurde (zählend die linken Klammern). Zum Beispiel, /apple(,)\sorange\1/ passt auf "apple, orange," in "apple, orange, cherry, peach".

\k<Name>

Benannter Rückverweis: Ein Rückverweis auf die zuletzt gematchte Zeichenfolge der benannten Capturing-Gruppe, die durch <Name> angegeben ist.

Zum Beispiel, /(?<title>\w+), yes \k<title>/ passt auf "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 Capturing-Gruppe anzuzeigen.

Quantifizierer

Quantifizierer geben an, wie viele Zeichen oder Ausdrücke gematcht werden sollen.

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

Zeichen Bedeutung
x*

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

x+

Passt auf das vorherige Element "x" 1 oder mehr Mal. Entspricht {1,}. Zum Beispiel, /a+/ passt auf das "a" in "candy" und alle "a"'s in "caaaaaaandy".

x?

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

Wenn es unmittelbar nach einem der Quantifizierer *, +, ?, oder {} verwendet wird, macht es den Quantifizierer nicht-gierig (das Minimum an Malen matchend), im Gegensatz zum Standard, der gierig ist (das Maximum an Malen matchend).

x{n}

Wo "n" eine nicht-negative Ganzzahl ist, passt exakt "n" Vorkommen des vorherigen Elements "x". Zum Beispiel passt /a{2}/ nicht auf das "a" in "candy", aber es passt auf alle "a"'s in "caandy", und die ersten beiden "a"'s in "caaandy".

x{n,}

Wo "n" eine nicht-negative Ganzzahl ist, passt auf mindestens "n" Vorkommen des vorherigen Elements "x". Zum Beispiel, /a{2,}/ passt nicht auf das "a" in "candy", aber es passt auf alle "a"'s in "caandy" und in "caaaaaaandy".

x{n,m}

Wo "n" und "m" nicht-negative Ganzzahlen sind und m >= n, passt auf mindestens "n" und höchstens "m" Vorkommen des vorherigen Elements "x". Zum Beispiel passt /a{1,3}/ auf nichts in "cndy", das "a" in "candy", die zwei "a"'s in "caandy", und die ersten drei "a"'s in "caaaaaaandy". Beachten Sie, dass beim Matchen von "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 passen. Das ?-Zeichen nach dem Quantifizierer macht den Quantifizierer "nicht-gierig": das bedeutet, dass er aufhört, sobald er die minimale Anzahl von Matches findet. Zum Beispiel, bei einem String wie "some <foo> <bar> new </bar> </foo> thing":

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

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}.