Reguläre Ausdrücke
Ein regulärer Ausdruck (regex für kurz) ermöglicht es Entwicklern, Zeichenfolgen mit einem Muster abzugleichen, Informationen über 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 orientiert sich an Perl.
Es wird empfohlen, den Leitfaden für reguläre Ausdrücke 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 Theorie der formalen Sprachen. Sie sind eine Möglichkeit, eine möglicherweise unendliche Menge von Zeichenfolgen (eine Sprache genannt) zu beschreiben. Ein regulärer Ausdruck benötigt im Wesentlichen die folgenden Merkmale:
- Eine Menge von Zeichen, die in der Sprache verwendet werden können, genannt Alphabet.
- Konkatenation:
ab
bedeutet "das Zeichena
gefolgt von dem Zeichenb
". - Vereinigung:
a|b
bedeutet "entwedera
oderb
". - Kleenescher Stern:
a*
bedeutet "null oder mehra
-Zeichen".
Bei Annahme eines endlichen Alphabets (wie die 26 Buchstaben des englischen Alphabets oder der gesamte Unicode-Zeichensatz) können alle regulären Sprachen durch die oben genannten Merkmale erzeugt 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 beinhalten JavaScript-Regulärausdrücke viele Abkürzungen, die unten eingeführt werden.
Hinweis: JavaScript-Reguläre Ausdrücke sind tatsächlich nicht regulär, aufgrund des Vorhandenseins von Rückverweisen (reguläre Ausdrücke müssen endliche Zustände haben). Sie sind jedoch immer noch 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, obwohl sie Auswirkungen auf die Leistung, die statische Analysierbarkeit und Probleme mit der Erstellungs-Ergonomie bei der Zeichenmaskierung haben können. Weitere Informationen finden Sie im RegExp
-Referenz.
Regex-Flags
Flags sind spezielle Parameter, die die Art und Weise ändern können, wie ein regulärer Ausdruck interpretiert wird oder wie er mit dem Eingabetext interagiert. Jedes Flag entspricht einer Zugriffs-Eigenschaft des RegExp
-Objekts.
Flag | Beschreibung | Entsprechende Eigenschaft |
---|---|---|
d |
Erzeugt Indizes für Teilübereinstimmungen. | hasIndices |
g |
Globale Suche. | global |
i |
Groß-/Kleinschreibung ignorierende Suche. | ignoreCase |
m |
Lässt ^ und $ den Beginn und das Ende jeder Zeile anstelle des gesamten Strings abgleichen. |
multiline |
s |
Erlaubt, dass . auch Zeilenumbruchzeichen erfasst. |
dotAll |
u |
"Unicode"; behandelt ein Muster als eine Sequenz von Unicode-Codepunkten. | unicode |
v |
Ein Upgrade zum u -Modus mit mehr Unicode-Funktionen. |
unicodeSets |
y |
Führen Sie eine "haftende" Suche durch, die am aktuellen Ort im Zielstring beginnt. | sticky |
Die Flags i
, m
und s
können für bestimmte Teile eines Regex unter Verwendung der Modifizierer-Syntax aktiviert oder deaktiviert werden.
Die Abschnitte unten 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 einer bestimmten Bedingung entspricht, ohne Zeichen zu konsumieren. Assertions können nicht quantifiziert werden.
- Eingabezussicherungen:
^
,$
-
Bestätigt, dass die aktuelle Position der Beginn oder das Ende der Eingabe ist, oder der Beginn 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 konsumiert ein oder mehrere Zeichen in der Zeichenfolge und schlägt entweder beim Abgleich fehl oder ermöglicht es dem Muster, mit dem nächsten Atom weiter abzugleichen.
- Rückverweis:
\1
,\2
-
Entspricht einem zuvor abgeglichenen Teilmuster, das mit einer erfassenden Gruppe erfasst wurde.
- Gruppe erfassen:
(...)
-
Entspricht einem Teilmuster und merkt sich Informationen über den Abgleich.
- Zeichenklasse:
[...]
,[^...]
-
Entspricht jedem Zeichen in oder nicht in einer Zeichenmenge. Wenn das
v
Flag aktiviert ist, kann es auch verwendet werden, um Zeichenketten mit endlicher Länge zu erfassen. - Zeichenklassenescape:
\d
,\D
,\w
,\W
,\s
,\S
-
Entspricht jedem Zeichen in oder nicht in einer vordefinierten Zeichenmenge.
- Zeichenescape:
\n
,\u{...}
-
Entspricht einem Zeichen, das möglicherweise nicht bequem in seiner literalen Form dargestellt werden kann.
- Literalzeichen:
a
,b
-
Entspricht einem bestimmten Zeichen.
- Modifizierer:
(?ims-ims:...)
-
Überschreibt Flag-Einstellungen in einem bestimmten Teil eines regulären Ausdrucks.
- Benannter Rückverweis:
\k<name>
-
Entspricht einem zuvor abgeglichenen Teilmuster, das mit einer benannten erfassenden Gruppe erfasst wurde.
- Benannte Erfassen-Gruppe:
(?<name>...)
-
Entspricht einem Teilmuster und merkt sich Informationen über den Abgleich. Die Gruppe kann später durch einen benutzerdefinierten Namen anstelle durch ihren Index im Muster identifiziert werden.
- Nicht-erfassende Gruppe:
(?:...)
-
Entspricht einem Teilmuster ohne das Merken von Informationen über den Abgleich.
- Unicode-Zeichenklassenescape:
\p{...}
,\P{...}
-
Entspricht einer Menge von Zeichen, die durch eine Unicode-Eigenschaft angegeben sind. Wenn das
v
Flag aktiviert ist, kann es auch verwendet werden, um Zeichenketten mit endlicher Länge zu erfassen. - Jokerzeichen:
.
-
Entspricht jedem Zeichen außer Zeilenendzeichen, es sei denn, das
s
-Flag ist gesetzt.
Andere Merkmale
Diese Merkmale geben selbst kein Muster an, sondern dienen zur Zusammensetzung von Mustern.
- Disjunktion:
|
-
Entspricht einem der Alternativen, die durch das
|
-Zeichen getrennt sind. - Quantifizierer:
*
,+
,?
,{n}
,{n,}
,{n,m}
-
Entspricht einem Atom eine bestimmte Anzahl von Malen.
Escape-Sequenzen
Escape-Sequenzen in Regexen beziehen sich auf jede Art von Syntax, die durch \
gefolgt von einem oder mehreren Zeichen gebildet wird. Sie können je nachdem, was auf \
folgt, sehr unterschiedliche Zwecke erfüllen. Unten ist eine Liste aller gültigen "Escape-Sequenzen":
Escape-Sequenz | Gefolgt von | Bedeutung |
---|---|---|
\B |
Keines | Nicht-Wort-Grenzen-Assertion |
\D |
Keines | Zeichenklassenescape, das nicht-Ziffernzeichen darstellt |
\P |
{ , eine Unicode-Eigenschaft und/oder Wert, dann } |
Unicode-Zeichenklassenescape, das Zeichen ohne die angegebene Unicode-Eigenschaft darstellt |
\S |
Keines | Zeichenklassenescape, das nicht-Whitespace-Zeichen darstellt |
\W |
Keines | Zeichenklassenescape, das nicht-Wort-Zeichen darstellt |
\b |
Keines | Wort-Grenzen-Assertion; innerhalb Zeichenklassen stellt U+0008 (BACKSPACE) dar |
\c |
Ein Buchstabe von A bis Z oder a bis z |
Ein Zeichenescape, das das Steuerzeichen mit einem Wert gleich dem Buchstabenwert modulo 32 darstellt |
\d |
Keines | Zeichenklassenescape, das Ziffernzeichen (0 bis 9 ) darstellt |
\f |
Keines | Zeichenescape, das U+000C (FORM FEED) darstellt |
\k |
< , eine Kennung, dann > |
Ein benannter Rückverweis |
\n |
Keines | Zeichenescape, das U+000A (LINE FEED) darstellt |
\p |
{ , eine Unicode-Eigenschaft und/oder Wert, dann } |
Unicode-Zeichenklassenescape, das Zeichen mit der angegebenen Unicode-Eigenschaft darstellt |
\q |
{ , eine Zeichenfolge, dann } |
Nur gültig innerhalb von v -Modus-Zeichenklassen; repräsentiert die Zeichenfolge, die buchstäblich abgeglichen werden soll |
\r |
Keines | Zeichenescape, das U+000D (CARRIAGE RETURN) darstellt |
\s |
Keines | Zeichenklassenescape, das Leerraumzeichen darstellt |
\t |
Keines | Zeichenescape, das U+0009 (CHARACTER TABULATION) darstellt |
\u |
4 hexadezimale Ziffern; oder { , 1 bis 6 hexadezimale Ziffern, dann } |
Zeichenescape, das das Zeichen mit dem gegebenen Codepunkt darstellt |
\v |
Keines | Zeichenescape, das U+000B (LINE TABULATION) darstellt |
\w |
Keines | Zeichenklassenescape, das Wortzeichen (A bis Z , a bis z , 0 bis 9 , _ ) darstellt |
\x |
2 hexadezimale Ziffern | Zeichenescape, das das Zeichen mit dem gegebenen Wert darstellt |
\0 |
Keines | Zeichenescape, das U+0000 (NULL) darstellt |
\
gefolgt von 0
und einer weiteren Ziffer wird zu einer veralteten oktalen Escape-Sequenz, die im Unicode-bewussten Modus verboten ist. \
gefolgt von einer anderen Ziffernfolge wird zu einem Rückverweis.
Zusätzlich kann \
einigen nicht-buchstaben-oder-ziffer-Zeichen folgen, in welchem Fall die Escape-Sequenz immer ein Zeichenescape ist, das das entkommene Zeichen selbst darstellt:
\$
,\(
,\)
,\*
,\+
,\.
,\/
,\?
,\[
,\\
,\]
,\^
,\{
,\|
,\}
: überall gültig\-
: nur innerhalb von Zeichenklassen gültig\!
,\#
,\%
,\&
,\,
,\:
,\;
,\<
,\=
,\>
,\@
,\`
,\~
: nur innerhalb vonv
-Modus-Zeichenklassen gültig
Die anderen ASCII-Zeichen, nämlich Leerzeichen, "
, '
, _
, und jede Zeichencharakter, die oben nicht erwähnt ist, sind keine gültigen Escape-Sequenzen. Im Unicode-unbewusster Modus werden Escape-Sequenzen, die nicht zu den obigen gehören, zu Identitäts-Escapes: Sie repräsentieren das Zeichen, das dem Backslash folgt. Zum Beispiel repräsentiert \a
das Zeichen a
. Dieses Verhalten schränkt die Möglichkeit ein, neue Escape-Sequenzen ohne Rückwärtskompatibilitätsprobleme einzuführen, und ist daher im Unicode-bewussten Modus verboten.
Spezifikationen
Browser-Kompatibilität
BCD tables only load in the browser