Regular expressions

Ein regulärer Ausdruck (regex abgekürzt) ermöglicht es Entwicklern, Zeichenfolgen mit einem Muster abzugleichen, Informationen zu Teilübereinstimmungen zu extrahieren oder einfach zu testen, ob die Zeichenfolge diesem Muster entspricht. Reguläre Ausdrücke werden in vielen Programmiersprachen verwendet, und die JavaScript-Syntax ist inspiriert von Perl.

Es wird empfohlen, den Leitfaden zu regulären Ausdrücken zu lesen, um einen Überblick über die verfügbaren Regex-Syntaxen und deren Funktionsweise zu erhalten.

Beschreibung

Reguläre Ausdrücke sind ein wichtiges Konzept in der formalen Sprachtheorie. Sie sind eine Möglichkeit, eine möglicherweise unendliche Menge von Zeichenfolgen zu beschreiben (eine Sprache genannt). Ein regulärer Ausdruck benötigt im Wesentlichen die folgenden Funktionen:

  • Ein Satz von Zeichen, die in der Sprache verwendet werden können, das sogenannte Alphabet.
  • Konkatenation: 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 (wie die 26 Buchstaben des englischen Alphabets oder das gesamte Unicode-Zeichensatz) können alle regulären Sprachen durch die obigen Funktionen generiert werden. Natürlich sind viele Muster auf diese Weise sehr mühsam auszudrücken (wie "10 Ziffern" oder "ein Zeichen, das kein Leerzeichen ist"), daher enthalten JavaScript-reguläre Ausdrücke viele Kurzschreibweisen, die unten eingeführt werden.

Hinweis: JavaScript-Reguläre Ausdrücke sind tatsächlich nicht regulär, aufgrund der Existenz von Rückverweisen (reguläre Ausdrücke müssen endliche Zustände haben). Dennoch sind sie eine sehr nützliche Funktion.

Erstellen von regulären Ausdrücken

Ein regulärer Ausdruck wird typischerweise 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 RegExp()-Konstruktor erstellt werden:

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

Sie haben keine Laufzeitunterschiede, können jedoch Auswirkungen auf die Leistung, die statische Analysierbarkeit und ergonomische Probleme beim Verfassen mit escape-Zeichen haben. Weitere Informationen finden Sie im RegExp Referenz.

Regex-Flags

Flags sind spezielle Parameter, die ändern können, wie ein regulärer Ausdruck interpretiert wird oder wie er mit dem Eingabetext interagiert. Jedes Flag entspricht einer Zugriffseigenschaft auf dem RegExp-Objekt.

Flag Beschreibung Entsprechende Eigenschaft
d Erzeugt Indizes für Teilmusterübereinstimmungen. hasIndices
g Globale Suche. global
i Groß-/Kleinschreibung ignorierende Suche. ignoreCase
m Ermöglicht ^ und $, neben Zeilenumbruchzeichen zu übereinstimmen. multiline
s Ermöglicht . neben Zeilenumbruchzeichen zu übereinstimmen. dotAll
u "Unicode"; behandelt ein Muster als eine Sequenz von Unicode-Codierungspunkten. unicode
v Ein Upgrade zum u-Modus mit mehr Unicode-Funktionen. unicodeSets
y Führen Sie eine "sticky" Suche durch, die ab der aktuellen Position in der Zielzeichenfolge beginnt. sticky

Die i, m und s Flags können mit der Modifier Syntax für spezifische Teile eines Regex aktiviert oder deaktiviert werden.

Die folgenden Abschnitte listen alle verfügbaren Regex-Syntaxen auf, gruppiert nach ihrer syntaktischen Natur.

Assertions

Assertions sind Konstrukte, die testen, ob die Zeichenfolge an der angegebenen Position eine bestimmte Bedingung erfüllt, aber keine Zeichen verbrauchen. Assertions können nicht quantifiziert werden.

Eingabebegrenzungs-Assertion: ^, $

Bestätigt, dass die aktuelle Position der Beginn oder das Ende der Eingabe ist, oder der Anfang oder das Ende einer Zeile, wenn das m-Flag gesetzt ist.

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

Bestätigt, dass die aktuelle Position von einem bestimmten Muster gefolgt oder nicht gefolgt wird.

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

Bestätigt, dass die aktuelle Position von einem bestimmten Muster vorangegangen oder nicht vorangegangen wird.

Wortgrenzen-Assertion: \b, \B

Bestätigt, dass die aktuelle Position eine Wortgrenze ist.

Atome

Atome sind die grundlegendsten Einheiten eines regulären Ausdrucks. Jedes Atom verbraucht ein oder mehrere Zeichen in der Zeichenfolge und scheitert entweder beim Übereinstimmen oder erlaubt dem Muster, mit dem nächsten Atom weiter zu übereinstimmen.

Rückverweis: \1, \2

Stimmt mit einem zuvor übereinstimmten Untermuster überein, das mit einer Erfassen-Gruppe erfasst wurde.

Erfassen-Gruppe: (...)

Stimmt mit einem Untermuster überein und merkt sich Informationen über die Übereinstimmung.

Zeichenklasse: [...], [^...]

Stimmt mit einem Zeichen innerhalb oder außerhalb eines Zeichensatzes überein. Wenn das v Flag gesetzt ist, kann es auch verwendet werden, um eine endliche Zeichenkette zu matchen.

Zeichenklassen-Flucht: \d, \D, \w, \W, \s, \S

Stimmt mit einem Zeichen aus einem vordefinierten Zeichensatz überein oder nicht.

Zeichen-Flucht: \n, \u{...}

Stimmt mit einem Zeichen überein, das nicht bequem in seiner direkten Form dargestellt werden kann.

Literales Zeichen: a, b

Stimmt mit einem bestimmten Zeichen überein.

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

Überschreibt die Flageinstellungen in einem bestimmten Teil eines regulären Ausdrucks.

Benannter Rückverweis: \k<name>

Stimmt mit einem zuvor übereinstimmten Untermuster überein, das mit einer benannten Erfassen-Gruppe erfasst wurde.

Benannte Erfassen-Gruppe: (?<name>...)

Stimmt mit einem Untermuster überein und merkt sich Informationen über die Übereinstimmung. Die Gruppe kann später durch einen benutzerdefinierten Namen statt durch ihren Index im Muster identifiziert werden.

Nicht-Erfassen-Gruppe: (?:...)

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

Unicode-Zeichenklassen-Flucht: \p{...}, \P{...}

Stimmt mit einem durch eine Unicode-Eigenschaft spezifizierten Zeichensatz überein. Wenn das v Flag gesetzt ist, kann es auch verwendet werden, um eine endliche Zeichenkette zu matchen.

Wildcard: .

Stimmt mit jedem Zeichen außer Zeilenbegrenzer überein, es sei denn, das s-Flag ist gesetzt.

Andere Funktionen

Diese Funktionen spezifizieren selbst kein Muster, werden jedoch verwendet, um Muster zusammenzusetzen.

Disjunktion: |

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

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

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

Escape-Sequenzen

Escape-Sequenzen in Regexes beziehen sich auf jede Art von Syntax, die durch \ gefolgt von einem oder mehreren Zeichen gebildet wird. Sie können je nach dem, was \ folgt, sehr unterschiedliche Zwecke erfüllen. Unten ist eine Liste aller gültigen "Escape-Sequenzen":

Escape-Sequenz Gefolgt von Bedeutung
\B None Nicht-Wort-Grenze Assertion
\D None Zeichenklassen-Flucht, die nicht-Zifferzeichen darstellt
\P {, eine Unicode-Eigenschaft und/oder den Wert, dann } Unicode-Zeichenklassen-Flucht, die Zeichen ohne die angegebene Unicode-Eigenschaft darstellt
\S None Zeichenklassen-Flucht, die nicht-Leerzeichen darstellt
\W None Zeichenklassen-Flucht, die nicht-Wortzeichen darstellt
\b None Wortgrenzen-Assertion; innerhalb von Zeichenklassen, repräsentiert es U+0008 (RÜCKSCHRITT)
\c Ein Buchstabe von A bis Z oder a bis z Eine Zeichen-Flucht, die das Steuerzeichen mit dem Wert gleich dem Zeichenwert des Buchstabens modulo 32 darstellt
\d None Zeichenklassen-Flucht, die Ziffernzeichen (0 bis 9) darstellt
\f None Zeichen-Flucht, die U+000C (FORM FEED) darstellt
\k <, eine Kennung, dann > Ein benannter Rückverweis
\n None Zeichen-Flucht, die U+000A (LINE FEED) darstellt
\p {, eine Unicode-Eigenschaft und/oder den Wert, dann } Unicode-Zeichenklassen-Flucht, die Zeichen mit der angegebenen Unicode-Eigenschaft darstellt
\q {, eine Zeichenkette, dann } Nur gültig innerhalb von v-Modus Zeichenklassen; stellt die Zeichenkette dar, die wörtlich gematcht werden soll
\r None Zeichen-Flucht, die U+000D (CARRIAGE RETURN) darstellt
\s None Zeichenklassen-Flucht, die Leerzeichen darstellt
\t None Zeichen-Flucht, die U+0009 (ZEICHENTABULATION) darstellt
\u 4 hexadezimale Ziffern; oder {, 1 bis 6 hexadezimale Ziffern, dann } Zeichen-Flucht, die das Zeichen mit dem gegebenen Codepunkt darstellt
\v None Zeichen-Flucht, die U+000B (LINIENTABULATION) darstellt
\w None Zeichenklassen-Flucht, die Wortzeichen (A bis Z, a bis z, 0 bis 9, _) darstellt
\x 2 hexadezimale Ziffern Zeichen-Flucht, die das Zeichen mit dem gegebenen Wert darstellt
\0 None Zeichen-Flucht, die U+0000 (NULL) darstellt

\ gefolgt von einer anderen Ziffer wird zu einer veralteten oktalen Escape-Sequenz, die im Unicode-bewussten Modus verboten ist.

Zusätzlich kann \ durch einige andere Nicht-Buchstaben-oder-Zifferzeichen gefolgt werden, in welchem Fall die Escape-Sequenz immer eine Zeichen-Flucht darstellt, die das Zeichen selbst repräsentiert:

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

Die anderen ASCII Zeichen, nämlich Leerzeichen, ", ', _ und jedes Buchstabenzeichen, das oben nicht erwähnt wurde, sind keine gültigen Escape-Sequenzen. Im Unicode-unbewussten Modus werden Escape-Sequenzen, die nicht zu den oben genannten gehören, zu Identitätsfluchten: sie stellen das Zeichen dar, das dem Backslash folgt. Zum Beispiel repräsentiert \a das Zeichen a. Dieses Verhalten schränkt die Möglichkeit ein, neue Escape-Sequenzen einzuführen, ohne Kompatibilitätsprobleme zu verursachen, und ist daher im Unicode-bewussten Modus verboten.

Spezifikationen

Specification
ECMAScript Language Specification
# prod-DecimalEscape
ECMAScript Language Specification
# prod-Atom
ECMAScript Language Specification
# prod-CharacterClass
ECMAScript Language Specification
# prod-CharacterClassEscape
ECMAScript Language Specification
# prod-CharacterEscape
ECMAScript Language Specification
# prod-Disjunction
ECMAScript Language Specification
# prod-Assertion
ECMAScript Language Specification
# prod-PatternCharacter
Unknown specification
# syntax
ECMAScript Language Specification
# prod-AtomEscape
ECMAScript Language Specification
# prod-Quantifier

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch