Reguläre Ausdrücke sind Muster, die verwendet werden, um Zeichenkombinationen in Zeichenketten zu finden. In JavaScript sind reguläre Ausdrücke auch Objekte. Diese Muster werden mit den Methoden exec()
und test()
von RegExp
sowie mit den Methoden match()
, matchAll()
, replace()
, replaceAll()
, search()
und split()
von String
verwendet. Dieses Kapitel beschreibt JavaScript-reguläre Ausdrücke. Es bietet einen kurzen Ãberblick über jedes Syntaxelement. Für eine ausführliche Erklärung der Semantik der einzelnen Elemente lesen Sie bitte die Referenz zu regulären Ausdrücken.
Sie können einen regulären Ausdruck auf zwei Arten erstellen:
Mit einem regulären Ausdrucksliteral, das aus einem Muster besteht, das zwischen Schrägstrichen eingeschlossen ist, wie folgt:
Reguläre Ausdrucksliterale ermöglichen die Kompilierung des regulären Ausdrucks, wenn das Skript geladen wird. Wenn der reguläre Ausdruck konstant bleibt, kann dies die Leistung verbessern.
Oder durch Aufrufen der Konstruktorfunktion des RegExp
-Objekts, wie folgt:
const re = new RegExp("ab+c");
Die Verwendung der Konstruktorfunktion ermöglicht die Laufzeitkompilierung des regulären Ausdrucks. Verwenden Sie die Konstruktorfunktion, wenn Sie wissen, dass sich das Muster des regulären Ausdrucks ändern wird, oder wenn Sie das Muster nicht kennen und es aus einer anderen Quelle, wie z.B. Benutzereingaben, erhalten.
Ein reguläres Ausdrucksmuster besteht aus einfachen Zeichen, wie /abc/
, oder aus einer Kombination von einfachen und Sonderzeichen, wie /ab*c/
oder /Chapter (\d+)\.\d*/
. Das letzte Beispiel enthält Klammern, die als Erinnerungsvorrichtung verwendet werden. Das Muster, das mit diesem Teil des Musters übereinstimmt, wird für die spätere Verwendung gespeichert, wie im Abschnitt Verwendung von Gruppen beschrieben.
Einfache Muster bestehen aus Zeichen, für die Sie eine direkte Ãbereinstimmung finden möchten. Zum Beispiel stimmt das Muster /abc/
nur dann mit Zeichenkombinationen in Zeichenketten überein, wenn die genaue Folge "abc"
vorkommt (alle Zeichen zusammen und in dieser Reihenfolge). Eine solche Ãbereinstimmung würde in den Zeichenketten "Hi, do you know your abc's?"
und "The latest airplane designs evolved from slabcraft."
erfolgreich sein. In beiden Fällen erfolgt die Ãbereinstimmung mit der Teilzeichenkette "abc"
. Es gibt keine Ãbereinstimmung in der Zeichenkette "Grab crab"
, da sie zwar die Teilzeichenkette "ab c"
enthält, jedoch nicht die exakte Teilzeichenkette "abc"
.
Wenn die Suche nach einer Ãbereinstimmung mehr als eine direkte Ãbereinstimmung erfordert, wie z.B. das Finden von einem oder mehreren b
s oder das Finden von Leerzeichen, können Sie Sonderzeichen im Muster einfügen. Um beispielsweise ein einzelnes "a"
gefolgt von null oder mehr "b"
s gefolgt von "c"
zu finden, würden Sie das Muster /ab*c/
verwenden: Das *
nach "b"
bedeutet "0 oder mehr Vorkommen des vorherigen Elements". In der Zeichenkette "cbbabbbbcdebc"
wird dieses Muster mit der Teilzeichenkette "abbbbc"
übereinstimmen.
Die folgenden Seiten bieten Listen der verschiedenen Sonderzeichen, die in jede Kategorie passen, zusammen mit Beschreibungen und Beispielen.
Assertions beinhalten Grenzen, die den Anfang und das Ende von Zeilen und Wörtern angeben, und andere Muster, die auf irgendeine Weise anzeigen, dass eine Ãbereinstimmung möglich ist (einschlieÃlich Look-Ahead, Look-Behind und konditionalen Ausdrücken).
Unterscheidet verschiedene Arten von Zeichen. Beispielsweise die Unterscheidung zwischen Buchstaben und Ziffern.
Gruppen fassen mehrere Muster als Ganzes zusammen, und erfassende Gruppen liefern zusätzliche Teilübereinstimmungsinformationen, wenn ein regulärer Ausdruck verwendet wird, um gegen eine Zeichenkette abzugleichen. Rückverweise beziehen sich auf eine zuvor erfasste Gruppe im selben regulären Ausdruck.
Geben die Anzahl der zu vergleichenden Zeichen oder Ausdrücke an.
Wenn Sie alle Sonderzeichen, die in regulären Ausdrücken verwendet werden können, in einer einzigen Tabelle betrachten möchten, sehen Sie sich Folgendes an:
Sonderzeichen in regulären Ausdrücken. Zeichen / Konstrukte Entsprechender Artikel[xyz]
, [^xyz]
, .
, \d
, \D
, \w
, \W
, \s
, \S
, \t
, \r
, \n
, \v
, \f
, [\b]
, \0
, \cX
, \xhh
, \uhhhh
, \u{hhhh}
, x|y
^
, $
, \b
, \B
, x(?=y)
, x(?!y)
, (?<=y)x
, (?<!y)x
(x)
, (?<Name>x)
, (?:x)
, \n
, \k<Name>
x*
, x+
, x?
, x{n}
, x{n,}
, x{n,m}
Hinweis: Ein gröÃeres Spickzettel ist ebenfalls verfügbar (nur sammeln von Teilen dieser einzelnen Artikel).
MaskierenWenn Sie eines der Sonderzeichen wörtlich verwenden müssen (zum Beispiel tatsächlich nach einem "*"
suchen), sollten Sie es maskieren, indem Sie einen Backslash davor setzen. Zum Beispiel, um nach "a"
gefolgt von "*"
gefolgt von "b"
zu suchen, würden Sie /a\*b/
verwenden â der Backslash "maskiert" das "*"
, wodurch es wörtlich statt speziell wird.
Hinweis: In vielen Fällen, wenn Sie versuchen, ein Sonderzeichen zu finden, können Sie es in eine Zeichenklasse einschlieÃen, als Alternative zum Maskieren, zum Beispiel /a[*]b/
.
Ãhnlich, wenn Sie ein reguläres Ausdrucksliteral schreiben und einen Schrägstrich ("/") abgleichen müssen, müssen Sie diesen maskieren (ansonsten beendet er das Muster). Zum Beispiel, um nach dem Zeichenfolgen "/example/" gefolgt von einem oder mehreren alphabetischen Zeichen zu suchen, würden Sie /\/example\/[a-z]+/i
verwendenâdie Backslashes vor jedem Schrägstrich machen sie wörtlich.
Um einen wörtlichen Backslash abzugleichen, müssen Sie den Backslash maskieren. Zum Beispiel, um nach der Zeichenkette "C:\" zu suchen, wobei "C" ein beliebiger Buchstabe sein kann, würden Sie /[A-Z]:\\/
verwenden â der erste Backslash maskiert den, der danach kommt, sodass der Ausdruck nach einem einzelnen wörtlichen Backslash sucht.
Wenn Sie den RegExp
-Konstruktor mit einem Zeichenfolgenliteral verwenden, denken Sie daran, dass der Backslash ein Fluchtsymbol in Zeichenfolgenliteralen ist, also müssen Sie ihn im regulären Ausdruck auf der Ebene des Zeichenfolgenliterals maskieren. /a\*b/
und new RegExp("a\\*b")
erstellen denselben Ausdruck, der nach "a" gefolgt von einem wörtlichen "*" gefolgt von "b" sucht.
Die Funktion RegExp.escape()
gibt eine neue Zeichenfolge zurück, bei der alle Sonderzeichen in der Regex-Syntax maskiert sind. Damit können Sie new RegExp(RegExp.escape("a*b"))
verwenden, um einen regulären Ausdruck zu erstellen, der nur die Zeichenfolge "a*b"
abgleicht.
Klammern um einen beliebigen Teil des Musters des regulären Ausdrucks bewirken, dass dieser Teil des übereinstimmenden Substrings gespeichert wird. Einmal gespeichert, kann der Substring für andere Verwendungen abgerufen werden. Weitere Details finden Sie unter Gruppen und Rückverweise.
Verwendung von regulären Ausdrücken in JavaScriptReguläre Ausdrücke werden mit den RegExp
-Methoden test()
und exec()
sowie mit den String
-Methoden match()
, matchAll()
, replace()
, replaceAll()
, search()
und split()
verwendet.
exec()
Führt eine Suche nach einer Ãbereinstimmung in einer Zeichenkette aus. Gibt ein Array mit Informationen oder null
bei keiner Ãbereinstimmung zurück. test()
Testet auf eine Ãbereinstimmung in einer Zeichenkette. Gibt true
oder false
zurück. match()
Gibt ein Array mit allen Ãbereinstimmungen, einschlieÃlich erfassender Gruppen, oder null
zurück, wenn keine Ãbereinstimmung gefunden wird. matchAll()
Gibt einen Iterator zurück, der alle Ãbereinstimmungen, einschlieÃlich erfassender Gruppen, enthält. search()
Testet auf eine Ãbereinstimmung in einer Zeichenkette. Gibt den Index der Ãbereinstimmung oder -1
zurück, wenn die Suche fehlschlägt. replace()
Führt eine Suche nach einer Ãbereinstimmung in einer Zeichenkette aus und ersetzt den übereinstimmenden Substring durch einen Ersatzsubstring. replaceAll()
Führt eine Suche nach allen Ãbereinstimmungen in einer Zeichenkette aus und ersetzt die übereinstimmenden Substrings durch einen Ersatzsubstring. split()
Verwendet einen regulären Ausdruck oder eine feste Zeichenfolge, um eine Zeichenkette in ein Array von Substrings zu zerlegen.
Wenn Sie wissen möchten, ob ein Muster in einer Zeichenkette gefunden wird, verwenden Sie die test()
- oder search()
-Methoden; für mehr Informationen (aber langsamere Ausführung) verwenden Sie die exec()
- oder match()
-Methoden. Wenn Sie exec()
oder match()
verwenden und wenn die Ãbereinstimmung erfolgreich ist, geben diese Methoden ein Array zurück und aktualisieren die Eigenschaften des zugehörigen regulären Ausdrucksobjekts sowie des vordefinierten regulären Ausdrucksobjekts RegExp
. Wenn die Ãbereinstimmung fehlschlägt, gibt die exec()
- Methode null
zurück (was zu false
wird).
Im folgenden Beispiel verwendet das Skript die exec()
-Methode, um eine Ãbereinstimmung in einer Zeichenkette zu finden.
const myRe = /d(b+)d/g;
const myArray = myRe.exec("cdbbdbsbz");
Wenn Sie nicht auf die Eigenschaften des regulären Ausdrucks zugreifen müssen, ist eine alternative Möglichkeit, myArray
mit diesem Skript zu erstellen:
const myArray = /d(b+)d/g.exec("cdbbdbsbz");
// similar to 'cdbbdbsbz'.match(/d(b+)d/g); however,
// 'cdbbdbsbz'.match(/d(b+)d/g) outputs [ "dbbd" ]
// while /d(b+)d/g.exec('cdbbdbsbz') outputs [ 'dbbd', 'bb', index: 1, input: 'cdbbdbsbz' ]
(Siehe Verwendung des globalen Suchflags mit exec()
für weitere Informationen zu den unterschiedlichen Verhaltensweisen.)
Wenn Sie den regulären Ausdruck aus einer Zeichenkette erstellen möchten, ist eine weitere Alternative dieses Skript:
const myRe = new RegExp("d(b+)d", "g");
const myArray = myRe.exec("cdbbdbsbz");
Mit diesen Skripten ist die Ãbereinstimmung erfolgreich und gibt das Array zurück und aktualisiert die in der folgenden Tabelle gezeigten Eigenschaften.
Ergebnisse der Ausführung eines regulären Ausdrucks. Objekt Eigenschaft oder Index Beschreibung In diesem BeispielmyArray
Der übereinstimmende Teilstring und alle gespeicherten Teilstrings. ['dbbd', 'bb', index: 1, input: 'cdbbdbsbz']
index
Der 0-basierte Index der Ãbereinstimmung in der Eingabe-Zeichenkette. 1
input
Die ursprüngliche Zeichenkette. 'cdbbdbsbz'
[0]
Die zuletzt übereinstimmenden Zeichen. 'dbbd'
myRe
lastIndex
Der Index, ab dem die nächste Ãbereinstimmung beginnen soll. (Diese Eigenschaft wird nur gesetzt, wenn der reguläre Ausdruck das g-Option, beschrieben in Erweiterte Suche mit Flags, verwendet.) 5
source
Der Text des Musters. Wird zur Zeit erstellt, wenn der reguläre Ausdruck erstellt wird, und nicht bei der Ausführung. 'd(b+)d'
Wie im zweiten Form dieses Beispiels gezeigt, können Sie einen regulären Ausdruck, der mit einem Objektinitialisierer erstellt wurde, ohne Zuweisung zu einer Variablen verwenden. Wenn Sie dies jedoch tun, ist jede Vorkommen ein neuer regulärer Ausdruck. Deshalb, wenn Sie diese Form ohne Zuweisung zu einer Variablen verwenden, können Sie die Eigenschaften dieses regulären Ausdrucks nicht nachträglich zugreifen. Angenommen, Sie haben dieses Skript:
const myRe = /d(b+)d/g;
const myArray = myRe.exec("cdbbdbsbz");
console.log(`The value of lastIndex is ${myRe.lastIndex}`);
// "The value of lastIndex is 5"
Wenn Sie jedoch dieses Skript haben:
const myArray = /d(b+)d/g.exec("cdbbdbsbz");
console.log(`The value of lastIndex is ${/d(b+)d/g.lastIndex}`);
// "The value of lastIndex is 0"
Die Vorkommen von /d(b+)d/g
in den beiden Anweisungen sind unterschiedliche reguläre Ausdrucksobjekte und haben daher unterschiedliche Werte für ihre lastIndex
-Eigenschaft. Wenn Sie auf die Eigenschaften eines regulären Ausdrucks zugreifen müssen, der mit einem Objektinitialisierer erstellt wurde, sollten Sie ihn zuerst einer Variablen zuweisen.
Reguläre Ausdrücke haben optionale Flags, die Funktionalität wie globale Suche und suche ohne Berücksichtigung der GroÃ- und Kleinschreibung ermöglichen. Diese Flags können getrennt oder zusammen in beliebiger Reihenfolge verwendet werden und sind als Teil des regulären Ausdrucks enthalten.
Flag Beschreibung Entsprechende Eigenschaftd
Generiert Indizes für Teilstring-Ãbereinstimmungen. hasIndices
g
Globale Suche. global
i
Suche ohne Berücksichtigung der GroÃ- und Kleinschreibung. ignoreCase
m
Macht ^
und $
passend zum Anfang und Ende jeder Zeile anstelle des ganzen Strings. multiline
s
Erlaubt es, dass .
Zeilenumbrüche abgleicht. dotAll
u
"Unicode"; behandelt ein Muster als eine Folge von Unicode-Codepunkten. unicode
v
Ein Upgrade des u
-Modus mit mehr Unicode-Features. unicodeSets
y
Führt eine "sticky" Suche aus, die ab der aktuellen Position in der Zielzeichenkette übereinstimmt. sticky
Um ein Flag in den regulären Ausdruck aufzunehmen, verwenden Sie diese Syntax:
const re = /pattern/flags;
oder
const re = new RegExp("pattern", "flags");
Beachten Sie, dass die Flags ein integraler Bestandteil eines regulären Ausdrucks sind. Sie können nicht später hinzugefügt oder entfernt werden.
Zum Beispiel, re = /\w+\s/g
erstellt einen regulären Ausdruck, der nach einem oder mehreren Zeichen gefolgt von einem Leerzeichen sucht und diese Kombination im gesamten String sucht.
const re = /\w+\s/g;
const str = "fee fi fo fum";
const myArray = str.match(re);
console.log(myArray);
// ["fee ", "fi ", "fo "]
Sie könnten die Zeile ersetzen:
mit:
const re = new RegExp("\\w+\\s", "g");
und das gleiche Ergebnis erhalten.
Das m
-Flag wird verwendet, um anzugeben, dass eine mehrzeilige Eingabezeichenfolge als mehrere Zeilen betrachtet werden soll. Wenn das m
-Flag verwendet wird, stimmen ^
und $
am Anfang oder Ende einer beliebigen Zeile innerhalb der Eingabezeichenfolge überein, anstatt am Anfang oder Ende des gesamten Strings.
Die Flags i
, m
und s
können für bestimmte Teile eines Regex mit der Modifiersyntax aktiviert oder deaktiviert werden.
RegExp.prototype.exec()
-Methode mit dem g
-Flag gibt jede Ãbereinstimmung und deren Position iterativ zurück.
const str = "fee fi fo fum";
const re = /\w+\s/g;
console.log(re.exec(str)); // ["fee ", index: 0, input: "fee fi fo fum"]
console.log(re.exec(str)); // ["fi ", index: 4, input: "fee fi fo fum"]
console.log(re.exec(str)); // ["fo ", index: 7, input: "fee fi fo fum"]
console.log(re.exec(str)); // null
Im Gegensatz dazu gibt die String.prototype.match()
-Methode alle Ãbereinstimmungen auf einmal zurück, jedoch ohne deren Position.
console.log(str.match(re)); // ["fee ", "fi ", "fo "]
Verwendung von Unicode-regulären Ausdrücken
Das u
-Flag wird verwendet, um "Unicode"-reguläre Ausdrücke zu erstellen, d.h. reguläre Ausdrücke, die das Abgleichen mit Unicode-Text unterstützen. Eine wichtige Funktion, die im Unicode-Modus aktiviert ist, sind Unicode-Eigenschaftsfluchten. Zum Beispiel könnte der folgende reguläre Ausdruck verwendet werden, um gegen ein beliebiges Unicode-"Wort" abzugleichen:
Unicode-reguläre Ausdrücke haben auch anderes Ausführungsverhalten. RegExp.prototype.unicode
enthält mehr Erklärungen dazu.
Im folgenden Beispiel wird vom Benutzer erwartet, eine Telefonnummer einzugeben. Wenn der Benutzer die Schaltfläche "Prüfen" drückt, überprüft das Skript die Gültigkeit der Nummer. Wenn die Nummer gültig ist (die Zeichenfolge, die durch den regulären Ausdruck angegeben wird, übereinstimmt), zeigt das Skript eine Nachricht an, in der dem Benutzer gedankt und die Nummer bestätigt wird. Wenn die Nummer ungültig ist, teilt das Skript dem Benutzer mit, dass die Telefonnummer nicht gültig ist.
Der reguläre Ausdruck sucht nach:
^
\d{3}
ODER |
einer linken Klammer \(
, gefolgt von drei Ziffern \d{3}
, gefolgt von einer schlieÃenden Klammer \)
, in einer nicht-erfassenden Gruppe (?:)
()
\d{3}
\1
\d{4}
$
<p>
Enter your phone number (with area code) and then click "Check".
<br />
The expected format is like ###-###-####.
</p>
<form id="form">
<input id="phone" />
<button type="submit">Check</button>
</form>
<p id="output"></p>
JavaScript
const form = document.querySelector("#form");
const input = document.querySelector("#phone");
const output = document.querySelector("#output");
const re = /^(?:\d{3}|\(\d{3}\))([-/.])\d{3}\1\d{4}$/;
function testInfo(phoneInput) {
const ok = re.exec(phoneInput.value);
output.textContent = ok
? `Thanks, your phone number is ${ok[0]}`
: `${phoneInput.value} isn't a phone number with area code!`;
}
form.addEventListener("submit", (event) => {
event.preventDefault();
testInfo(input);
});
Ergebnis Werkzeuge
Ein Online-Tool zum Lernen, Erstellen und Testen von regulären Ausdrücken.
Ein Online-Regex-Ersteller/Debug-Tool
Ein Online-interaktives Tutorial, Spickzettel und Spielplatz.
Ein Online-Visual-Regex-Tester.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4