Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
Reguläre Ausdrücke
Einregulärer Ausdruck (kurzregex) ermöglicht es Entwicklern, Zeichenfolgen anhand eines Musters zu überprüfen, 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 vonPerl inspiriert.
Es wird Ihnen empfohlen, denLeitfaden zu regulären Ausdrücken zu lesen, um einen Überblick über die verfügbaren Regex-Syntaxen und deren Funktionsweise zu erhalten.
In diesem Artikel
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 (einLanguage genannt) zu beschreiben. Ein regulärer Ausdruck benötigt im Wesentlichen folgende Merkmale:
- Eine Menge vonZeichen, die in der Sprache verwendet werden können, genannt dasAlphabet.
- Konkatenation:
abbedeutet "das Zeichenagefolgt vom Zeichenb". - Union:
a|bbedeutet "entwederaoderb". - Kleene-Stern:
a*bedeutet "null oder mehraZeichen".
Angenommen, ein endliches Alphabet (wie die 26 Buchstaben des englischen Alphabets oder das gesamte Unicode-Zeichen-Set) ist vorhanden, können alle regulären Sprachen durch die oben genannten Merkmale erzeugt werden. Natürlich sind viele Muster sehr mühsam auf diese Weise auszudrücken (wie "10 Ziffern" oder "ein Zeichen, das kein Leerzeichen ist"), daher beinhalten JavaScript-Reguläre Ausdrücke viele Kurzformen, die unten eingeführt werden.
Hinweis:JavaScript-Reguläre Ausdrücke sind in der Tat nicht regulär, aufgrund der Existenz vonRü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 demRegExp()-Konstruktor erstellt werden:
const regex2 = new RegExp("ab+c", "g");Sie haben keine Laufzeitunterschiede, obwohl sie Auswirkungen auf die Leistung, die statische Analysierbarkeit und ergonomische Probleme beim Autorieren mit Escape-Zeichen haben können. Weitere Informationen finden Sie imRegExp 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 Zugriffseigenschaft desRegExp-Objekts.
| Flag | Beschreibung | Entsprechende Eigenschaft |
|---|---|---|
d | Erzeugt Indizes für Teilzeichenfolgenübereinstimmungen. | hasIndices |
g | Globale Suche. | global |
i | Groß-/Kleinschreibung ignorierende Suche. | ignoreCase |
m | Lässt^ und$ den Anfang und das Ende jeder Zeile anstelle des gesamten Strings treffen. | multiline |
s | Ermöglicht es, dass. auch Zeilenumbruchszeichen umfasst. | dotAll |
u | "Unicode"; behandelt ein Muster als Folge von Unicode-Codes. | unicode |
v | Ein Upgrade zumu-Modus mit mehr Unicode-Funktionen. | unicodeSets |
y | Führt eine "sticky" Suche durch, die ab der aktuellen Position im Zielstring beginnt. | sticky |
Diei,m unds Flags können für spezifische Teile eines Regex mit derModifier Syntax aktiviert oder deaktiviert werden.
Die folgenden Abschnitte listen alle verfügbaren Regex-Syntaxen, gruppiert nach ihrer syntaktischen Natur, auf.
Assertions
Assertions sind Konstrukte, die testen, ob die Zeichenfolge eine bestimmte Bedingung an der angegebenen Position erfüllt, jedoch keine Zeichen konsumieren. Assertions können nichtquantifiziert werden.
- Eingabebegrenzungs-Assertion:
^,$ Stellt fest, dass die aktuelle Position der Anfang oder das Ende der Eingabe ist, oder der Anfang oder das Ende einer Zeile, wenn das
m-Flag gesetzt ist.- Lookahead-Assertion:
(?=...),(?!...) Stellt fest, dass die aktuelle Position von einem bestimmten Muster gefolgt oder nicht gefolgt wird.
- Lookbehind-Assertion:
(?<=...),(?<!...) Stellt fest, dass die aktuelle Position von einem bestimmten Muster vorangegangen oder nicht vorangegangen wird.
- Wortgrenzen-Assertion:
\b,\B Stellt fest, dass die aktuelle Position eine Wortgrenze ist.
Atome
Atome sind die grundlegendsten Einheiten eines regulären Ausdrucks. Jedes Atomkonsumiert ein oder mehr Zeichen in der Zeichenfolge und erlaubt es dem Muster entweder, nicht übereinzustimmen oder mit dem nächsten Atom weiter übereinzustimmen.
- Rückverweis:
\1,\2 Entspricht einem zuvor übereinstimmenden Teilmuster, das mit einer Fanggruppe erfasst wurde.
- Fanggruppe:
(...) Entspricht einem Teilmuster und speichert Informationen über die Übereinstimmung.
- Zeichenklasse:
[...],[^...] Entspricht einem beliebigen Zeichen in oder nicht in einer Zeichengruppe. Wenn das
vFlag aktiviert ist, kann es auch verwendet werden, um Zeichenfolgen endlicher Länge zu treffen.- Zeichenklassen-Escape:
\d,\D,\w,\W,\s,\S Entspricht einem beliebigen Zeichen in oder nicht in einem vordefinierten Zeichensatz.
- Zeichen-Escape:
\n,\u{...} Entspricht einem Zeichen, das möglicherweise nicht bequem in seiner literalen Form dargestellt werden kann.
- Literal Character:
a,b Entspricht einem bestimmten Zeichen.
- Modifier:
(?ims-ims:...) Überschreibt Flageinstellungen in einem bestimmten Teil eines regulären Ausdrucks.
- Benannter Rückverweis:
\k<name> Entspricht einem zuvor übereinstimmenden Teilmuster, das mit einer benannten Fanggruppe erfasst wurde.
- Benannte Fanggruppe:
(?<name>...) Entspricht einem Teilmuster und speichert Informationen über die Übereinstimmung. Die Gruppe kann später durch einen benutzerdefinierten Namen statt durch ihren Index im Muster identifiziert werden.
- Nicht-fangende Gruppe:
(?:...) Entspricht einem Teilmuster ohne Informationen über die Übereinstimmung zu speichern.
- Unicode-Zeichenklassen-Escape:
\p{...},\P{...} Entspricht einem Zeichensatz, der durch eine Unicode-Eigenschaft angegeben wird. Wenn das
vFlag aktiviert ist, kann es auch verwendet werden, um Zeichenfolgen endlicher Länge zu treffen.- Wildcard:
. Entspricht jedem Zeichen außer Zeilenabschlusszeichen, es sei denn, das
s-Flag ist gesetzt.
Andere Funktionen
Diese Funktionen spezifizieren keine Muster selbst, sondern werden verwendet, um Muster zu komponieren.
- Disjunction:
| Entspricht einem der durch das Zeichen
|getrennten Alternativen.- 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 sehr unterschiedliche Zwecke dienen, abhängig davon, was auf\ folgt. Unten ist eine Liste aller gültigen "Escape-Sequenzen":
| Escape-Sequenz | Gefolgt von | Bedeutung |
|---|---|---|
\B | Keiner | Nicht-Wortgrenzen-Assertion |
\D | Keiner | Zeichenklassen-Escape, der nicht-Ziffern-Zeichen darstellt |
\P | {, eine Unicode-Eigenschaft und/oder Wert, dann} | Unicode-Zeichenklassen-Escape, der Zeichen ohne die angegebene Unicode-Eigenschaft darstellt |
\S | Keiner | Zeichenklassen-Escape, der nicht-Weiße-Zeichen darstellt |
\W | Keiner | Zeichenklassen-Escape, der nicht-Wort-Zeichen darstellt |
\b | Keiner | Wortgrenzen-Assertion; innerhalbZeichenklassen, stellt U+0008 (RÜCKSCHRITT) dar |
\c | Ein Buchstabe vonA bisZ odera bisz | EinZeichen-Escape, der das Steuerzeichen mit einem Wert gleich dem Buchstaben-Zeichenwert modulo 32 darstellt |
\d | Keiner | Zeichenklassen-Escape, der Ziffern-Zeichen (0 bis9) darstellt |
\f | Keiner | Zeichen-Escape, der U+000C (FORMULAR-VORSCHUB) darstellt |
\k | <, ein Bezeichner, dann> | Einbenannter Rückverweis |
\n | Keiner | Zeichen-Escape, der U+000A (ZEILENUMBRUCH) darstellt |
\p | {, eine Unicode-Eigenschaft und/oder Wert, dann} | Unicode-Zeichenklassen-Escape, der Zeichen mit der angegebenen Unicode-Eigenschaft darstellt |
\q | {, eine Zeichenfolge, dann} | Nur gültig innerhalbv-Modus-Zeichenklassen; stellt die Zeichenfolge dar, die wörtlich übereinstimmen soll |
\r | Keiner | Zeichen-Escape, der U+000D (WAGENRÜCKLAUF) darstellt |
\s | Keiner | Zeichenklassen-Escape, der Leerraum-Zeichen darstellt |
\t | Keiner | Zeichen-Escape, der U+0009 (TABULATOR-ZEICHEN) darstellt |
\u | 4 hexadezimale Ziffern; oder{, 1 bis 6 hexadezimale Ziffern, dann} | Zeichen-Escape, der das Zeichen mit dem angegebenen Codepunkt darstellt |
\v | Keiner | Zeichen-Escape, der U+000B (ZEILEN-TABULATOR) darstellt |
\w | Keiner | Zeichenklassen-Escape, der Wort-Zeichen (A bisZ,a bisz,0 bis9,_) darstellt |
\x | 2 hexadezimale Ziffern | Zeichen-Escape, der das Zeichen mit dem angegebenen Wert darstellt |
\0 | Keiner | Zeichen-Escape, der U+0000 (NULL) darstellt |
\ gefolgt von0 und einer anderen Ziffer wird zu einerveralteten oktalen Escape-Sequenz, die imUnicode-bewussten Modus verboten ist.\ gefolgt von einer anderen Ziffernfolge wird zu einemRückverweis.
Darüber hinaus kann\ gefolgt von einigen Nicht-Buchstaben-oder-Ziffer-Zeichen sein, in welchem Fall die Escape-Sequenz immer eineZeichen-Escape darstellt, die das entkommene Zeichen selbst darstellt:
\$,\(,\),\*,\+,\.,\/,\?,\[,\\,\],\^,\{,\|,\}: überall gültig\-: nur innerhalbZeichenklassen gültig\!,\#,\%,\&,\,,\:,\;,\<,\=,\>,\@,\`,\~: nur innerhalbv-Modus-Zeichenklassen gültig
Die anderenASCII Zeichen, nämlich Leerzeichen,",',_, und alle Buchstabenzeichen, die oben nicht erwähnt wurden, sind keine gültigen Escape-Sequenzen. ImUnicode-unbewussten Modus werden Escape-Sequenzen, die nicht zu den oben genannten gehören, zuIdentitäts-Escape-Sequenzen: sie stellen das Zeichen dar, das dem Backslash folgt. Zum Beispiel repräsentiert\a das Zeichena. Dieses Verhalten schränkt die Möglichkeit ein, neue Escape-Sequenzen einzuführen, ohne Rückwärtskompatibilitätsprobleme zu verursachen, und ist daher im Unicode-bewussten Modus verboten.