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

View in English Always switch to English

Reguläre Ausdrücke

Ein regulärer Ausdruck (kurz Regex) ermöglicht es Entwicklern, Zeichenfolgen mit einem Muster abzugleichen, Informationen über übereinstimmende Teilzeichenfolgen zu extrahieren oder einfach zu prüfen, ob eine Zeichenfolge dem Muster entspricht. Reguläre Ausdrücke werden in vielen Programmiersprachen verwendet. Die JavaScript-Syntax ist von Perl inspiriert.

Lesen Sie den Leitfaden zu regulären Ausdrücken, um einen Überblick über die verfügbaren Regex-Syntaxformen und ihre Funktionsweise zu erhalten.

Beschreibung

Reguläre Ausdrücke sind ein wichtiges Konzept der Theorie formaler Sprachen. Mit ihnen lässt sich eine möglicherweise unendliche Menge von Zeichenfolgen beschreiben (eine sogenannte Sprache). Im Kern benötigt ein regulärer Ausdruck die folgenden Bestandteile:

  • Eine Menge von Zeichen, die in der Sprache verwendet werden können, das sogenannte Alphabet.
  • Verkettung: ab bedeutet „das Zeichen a, gefolgt vom Zeichen b“.
  • Vereinigung: a|b bedeutet „entweder a oder b“.
  • Kleene-Stern: a* bedeutet „null oder mehr a-Zeichen“.

Unter der Annahme eines endlichen Alphabets (etwa der 26 Buchstaben des englischen Alphabets oder des gesamten Unicode-Zeichensatzes) lassen sich alle regulären Sprachen mit den oben genannten Bestandteilen erzeugen. Viele Muster wären auf diese Weise allerdings sehr umständlich auszudrücken (etwa „10 Ziffern“ oder „ein Zeichen, das kein Leerzeichen ist“). Deshalb bieten reguläre Ausdrücke in JavaScript zahlreiche Kurzschreibweisen, die im Folgenden vorgestellt werden.

Hinweis: Reguläre Ausdrücke in JavaScript sind aufgrund von Backreferences streng genommen nicht regulär (reguläre Ausdrücke müssen endlich viele Zustände haben). Dennoch sind sie eine sehr nützliche Funktion.

Reguläre Ausdrücke erstellen

Ein regulärer Ausdruck wird normalerweise als Literal erstellt, indem ein Muster in Schrägstriche (/) eingeschlossen wird:

js
const regex1 = /ab+c/g;

Reguläre Ausdrücke können auch mit dem Konstruktor RegExp() erstellt werden:

js
const regex2 = new RegExp("ab+c", "g");

Zur Laufzeit unterscheiden sich die beiden Varianten nicht. Sie können sich jedoch auf die Leistung und die statische Analysierbarkeit auswirken sowie die Erstellung durch erforderliches Escaping von Zeichen unterschiedlich aufwendig machen. Weitere Informationen finden Sie in der Referenz zu RegExp.

Regex-Flags

Flags sind spezielle Parameter, die beeinflussen können, wie ein regulärer Ausdruck interpretiert wird oder wie er mit dem Eingabetext interagiert. Jedem Flag entspricht eine Zugriffseigenschaft des RegExp-Objekts.

Flag Beschreibung Zugehörige Eigenschaft
d Erzeugt Indizes für übereinstimmende Teilzeichenfolgen. hasIndices
g Globale Suche. global
i Suche ohne Berücksichtigung der Groß- und Kleinschreibung. ignoreCase
m Bewirkt, dass ^ und $ mit dem Anfang und Ende jeder Zeile statt mit dem Anfang und Ende der gesamten Zeichenfolge übereinstimmen. multiline
s Ermöglicht, dass . auch mit Zeilenumbruchzeichen übereinstimmt. dotAll
u „Unicode“; behandelt ein Muster als Folge von Unicode-Codepunkten. unicode
v Eine Erweiterung des u-Modus um zusätzliche Unicode-Funktionen. unicodeSets
y Führt eine „Sticky“-Suche durch, bei der der Abgleich an der aktuellen Position in der Zielzeichenfolge beginnt. sticky

Die Flags i, m und s können mithilfe der Modifier-Syntax für bestimmte Teile eines regulären Ausdrucks aktiviert oder deaktiviert werden.

Die folgenden Abschnitte führen alle verfügbaren Regex-Syntaxformen auf, gruppiert nach ihrer syntaktischen Funktion.

Assertions

Assertions sind Konstrukte, die prüfen, ob die Zeichenfolge an einer bestimmten Position eine Bedingung erfüllt, ohne Zeichen zu verbrauchen. Assertions können nicht quantifiziert werden.

Assertion für die Zeichenfolgengrenze: \A, \z, \Z

Prüft, ob die aktuelle Position genau am Anfang oder Ende der gesamten Zeichenfolge liegt (\Z lässt auch einen abschließenden Zeilenumbruch zu), unabhängig davon, ob das Flag m gesetzt ist.

Assertion für die Eingabegrenze: ^, $

Prüft, ob die aktuelle Position am Anfang oder Ende der Eingabe liegt oder, wenn das Flag m gesetzt ist, am Anfang oder Ende einer Zeile.

Lookahead-Assertion: (?=...), (?!...)

Prüft, ob auf die aktuelle Position ein bestimmtes Muster folgt oder nicht folgt.

Lookbehind-Assertion: (?<=...), (?<!...)

Prüft, ob der aktuellen Position ein bestimmtes Muster vorausgeht oder nicht vorausgeht.

Assertion für Wortgrenzen: \b, \B

Prüft, ob die aktuelle Position eine Wortgrenze ist.

Atome

Atome sind die grundlegenden Einheiten eines regulären Ausdrucks. Jedes Atom verbraucht null oder mehr Zeichen der Zeichenfolge und bewirkt entweder, dass der Abgleich fehlschlägt, oder ermöglicht die Fortsetzung des Abgleichs mit dem nächsten Atom.

Backreference: \1, \2

Stimmt mit einem zuvor abgeglichenen Teilmuster überein, das mit einer Capturing Group erfasst wurde.

Capturing Group: (...)

Stimmt mit einem Teilmuster überein und speichert Informationen über die Übereinstimmung.

Character Class: [...], [^...]

Stimmt mit einem beliebigen Zeichen aus einer Zeichenmenge beziehungsweise außerhalb dieser Menge überein. Wenn das Flag v aktiviert ist, können damit auch Zeichenfolgen endlicher Länge abgeglichen werden.

Character-Class-Escape: \d, \D, \w, \W, \s, \S

Stimmt mit einem beliebigen Zeichen aus einer vordefinierten Zeichenmenge beziehungsweise außerhalb dieser Menge überein.

Character Escape: \n, \u{...}

Stimmt mit einem Zeichen überein, das sich möglicherweise nicht gut in seiner literalen Form darstellen lässt.

Literales Zeichen: a, b

Stimmt mit einem bestimmten Zeichen überein.

Modifier: (?ims-ims:...)

Überschreibt Flag-Einstellungen in einem bestimmten Teil eines regulären Ausdrucks.

Benannte Backreference: \k<name>

Stimmt mit einem zuvor abgeglichenen Teilmuster überein, das mit einer benannten Capturing Group erfasst wurde.

Benannte Capturing Group: (?<name>...)

Stimmt mit einem Teilmuster überein und speichert Informationen über die Übereinstimmung. Die Gruppe kann später anhand eines selbst gewählten Namens statt anhand ihres Index im Muster identifiziert werden.

Non-Capturing Group: (?:...)

Stimmt mit einem Teilmuster überein, ohne Informationen über die Übereinstimmung zu speichern.

Unicode-Character-Class-Escape: \p{...}, \P{...}

Stimmt mit einer durch eine Unicode-Eigenschaft festgelegten Zeichenmenge überein. Wenn das Flag v aktiviert ist, können damit auch Zeichenfolgen endlicher Länge abgeglichen werden.

Wildcard: .

Stimmt mit jedem Zeichen außer Zeilenabschlusszeichen überein, sofern das Flag s nicht gesetzt ist.

Weitere Funktionen

Diese Funktionen legen selbst kein Muster fest, sondern dienen dazu, Muster zusammenzusetzen.

Disjunktion: |

Stimmt mit einer von mehreren Alternativen überein, die durch das Zeichen | getrennt sind.

Quantifier: *, +, ?, {n}, {n,}, {n,m}

Stimmt mit einem Atom überein, das eine bestimmte Anzahl von Malen vorkommt.

Escape-Sequenzen

Escape-Sequenzen in regulären Ausdrücken sind Syntaxformen, die aus \ gefolgt von einem oder mehreren Zeichen bestehen. Je nachdem, was auf \ folgt, können sie sehr unterschiedliche Zwecke erfüllen. Die folgende Tabelle führt alle gültigen Escape-Sequenzen auf:

Escape-Sequenz Gefolgt von Bedeutung
\A Nichts Assertion für die Zeichenfolgengrenze
\B Nichts Assertion für Positionen außerhalb von Wortgrenzen
\D Nichts Character-Class-Escape für Zeichen, die keine Ziffern sind
\P {, einer Unicode-Eigenschaft und/oder einem Wert, dann } Unicode-Character-Class-Escape für Zeichen ohne die angegebene Unicode-Eigenschaft
\S Nichts Character-Class-Escape für Zeichen, die keine Whitespace-Zeichen sind
\W Nichts Character-Class-Escape für Zeichen, die keine Wortzeichen sind
\Z Nichts Assertion für die Zeichenfolgengrenze
\b Nichts Assertion für Wortgrenzen; innerhalb von Character Classes steht es für U+0008 (BACKSPACE)
\c Einem Buchstaben von A bis Z oder a bis z Character Escape für das Steuerzeichen, dessen Wert dem Zeichenwert des Buchstabens modulo 32 entspricht
\d Nichts Character-Class-Escape für Ziffern (0 bis 9)
\f Nichts Character Escape für U+000C (FORM FEED)
\k <, einem Bezeichner, dann > Eine benannte Backreference
\n Nichts Character Escape für U+000A (LINE FEED)
\p {, einer Unicode-Eigenschaft und/oder einem Wert, dann } Unicode-Character-Class-Escape für Zeichen mit der angegebenen Unicode-Eigenschaft
\q {, einer Zeichenfolge, dann } Nur innerhalb von Character Classes im v-Modus gültig; steht für die Zeichenfolge, die wörtlich abgeglichen werden soll
\r Nichts Character Escape für U+000D (CARRIAGE RETURN)
\s Nichts Character-Class-Escape für Whitespace-Zeichen
\t Nichts Character Escape für U+0009 (CHARACTER TABULATION)
\u 4 Hexadezimalziffern; oder {, einer oder mehreren Hexadezimalziffern, dann } Character Escape für das Zeichen mit dem angegebenen Codepunkt
\v Nichts Character Escape für U+000B (LINE TABULATION)
\w Nichts Character-Class-Escape für Wortzeichen (A bis Z, a bis z, 0 bis 9, _)
\x 2 Hexadezimalziffern Character Escape für das Zeichen mit dem angegebenen Wert
\z Nichts Assertion für die Zeichenfolgengrenze
\0 Nichts Character Escape für U+0000 (NULL)

Auf \ gefolgt von 0 und einer weiteren Ziffer folgt eine veraltete oktale Escape-Sequenz, die im Unicode-bewussten Modus verboten ist. Folgt auf \ eine andere Ziffernfolge, entsteht eine Backreference.

Außerdem können auf \ bestimmte Zeichen folgen, die weder Buchstaben noch Ziffern sind. In diesem Fall ist die Escape-Sequenz immer ein Character Escape, das für das escapte Zeichen selbst steht:

  • \$, \(, \), \*, \+, \., \/, \?, \[, \\, \], \^, \{, \|, \}: überall gültig
  • \-: nur innerhalb von Character Classes gültig
  • \!, \#, \%, \&, \,, \:, \;, \<, \=, \>, \@, \`, \~: nur innerhalb von Character Classes im v-Modus gültig

Die übrigen ASCII-Zeichen – nämlich das Leerzeichen, ", ', _ sowie alle oben nicht genannten Buchstaben – bilden keine gültigen Escape-Sequenzen. Im Unicode-unbewussten Modus werden Escape-Sequenzen, die nicht zu den oben genannten gehören, zu Identity Escapes: Sie stehen für das Zeichen, das auf den Backslash folgt. Beispielsweise steht \a für das Zeichen a. Dieses Verhalten schränkt die Möglichkeit ein, neue Escape-Sequenzen einzuführen, ohne Probleme mit der Abwärtskompatibilität zu verursachen. Daher ist es im Unicode-bewussten Modus verboten.

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# prod-DecimalEscape
ECMAScript® 2027 Language Specification
# sec-patterns-static-semantics-early-errors
ECMAScript® 2027 Language Specification
# prod-Assertion
ECMAScript® 2027 Language Specification
# prod-Atom
ECMAScript® 2027 Language Specification
# prod-CharacterEscape
ECMAScript® 2027 Language Specification
# prod-AtomEscape
ECMAScript® 2027 Language Specification
# prod-RegularExpressionModifiers
ECMAScript® 2027 Language Specification
# prod-Quantifier
ECMAScript® 2027 Language Specification
# prod-CharacterClass
ECMAScript® 2027 Language Specification
# prod-CharacterClassEscape
ECMAScript® 2027 Language Specification
# prod-RegExpUnicodeEscapeSequence
ECMAScript® 2027 Language Specification
# prod-Disjunction
ECMAScript® 2027 Language Specification
# prod-PatternCharacter
Regular Expression Buffer Boundaries for ECMAScript
# sec-patterns

Browser-Kompatibilität

Siehe auch