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 Zeichena
gefolgt vom Zeichenb
". - Vereinigung:
a|b
bedeutet "entwedera
oderb
". - Kleene-Stern:
a*
bedeutet "null oder mehra
-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:
const regex1 = /ab+c/g;
Reguläre Ausdrücke können auch mit dem RegExp()
-Konstruktor erstellt werden:
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 vonv
-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
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Reguläre Ausdrücke Leitfaden
RegExp