Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
RegExp
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
* Some parts of this feature may have varying levels of support.
DasRegExp-Objekt wird zum Abgleichen von Texten anhand eines Musters verwendet.
Für eine Einführung in reguläre Ausdrücke lesen Sie dasKapitel über reguläre Ausdrücke im JavaScript-Leitfaden. Für detaillierte Informationen zur Syntax regulärer Ausdrücke lesen Sie dieReferenz zu regulären Ausdrücken.
In diesem Artikel
Beschreibung
>Literale Notation und Konstruktor
Es gibt zwei Möglichkeiten, einRegExp-Objekt zu erstellen: eineliterale Notation und einenKonstruktor.
- Dieliterale Notation nimmt ein Muster zwischen zwei Schrägstrichen, gefolgt von optionalenFlags nach dem zweiten Schrägstrich.
- DieKonstruktor-Funktion nimmt entweder einen String oder ein
RegExp-Objekt als ersten Parameter und einen String von optionalenFlags als zweiten Parameter.
Die folgenden drei Ausdrücke erzeugen dasselbe reguläre Ausdrucksobjekt:
const re = /ab+c/i; // literal notation// ORconst re = new RegExp("ab+c", "i"); // constructor with string pattern as first argument// ORconst re = new RegExp(/ab+c/, "i"); // constructor with regular expression literal as first argumentBevor reguläre Ausdrücke verwendet werden können, müssen sie kompiliert werden. Dieser Prozess ermöglicht es ihnen, Übereinstimmungen effizienter zu finden. Mehr über den Prozess finden Sie in dendotnet-Dokumenten.
Die literale Notation führt zur Kompilierung des regulären Ausdrucks, wenn der Ausdruck ausgewertet wird. Andererseits führt der Konstruktor desRegExp-Objekts,new RegExp('ab+c'), zur Laufzeit zur Kompilierung des regulären Ausdrucks.
Verwenden Sie einen String als erstes Argument desRegExp() Konstruktors, wenn Sieden regulären Ausdruck aus dynamischen Eingaben erstellen wollen.
Flags im Konstruktor
Der Ausdrucknew RegExp(/ab+c/, flags) erstellt ein neuesRegExp, indem die Quelle des ersten Parameters und die vom zweiten bereitgestelltenFlags verwendet werden.
Beim Verwenden der Konstruktorfunktion sind die normalen String-Escape-Regeln erforderlich (besondere Zeichen müssen in einem String mit\ eingefügt werden).
Zum Beispiel sind die folgenden gleichwertig:
const re = /\w+/;// ORconst re = new RegExp("\\w+");Spezielle Behandlung von Regexen
Hinweis:Ob etwas ein "Regex" ist, kann überDuck-Typing bestimmt werden. Es muss keinRegExp sein!
Einige eingebaute Methoden behandeln Regexe speziell. Sie bestimmen inmehreren Schritten, obx ein Regex ist:
xmuss ein Objekt sein (kein primitiver Typ).- Wenn
x[Symbol.match]nichtundefinedist, überprüfen Sie, ob estruthy ist. - Andernfalls, wenn
x[Symbol.match]undefinedist, überprüfen Sie, obxmit demRegExp-Konstruktor erstellt wurde. (Dieser Schritt sollte selten auftreten, da, wennxeinRegExp-Objekt ist, das nicht verändert wurde, es eineSymbol.match-Eigenschaft haben sollte.)
Beachten Sie, dass in den meisten Fällen dieSymbol.match-Überprüfung durchgeführt wird, was bedeutet:
- Ein tatsächliches
RegExp-Objekt, dessenSymbol.match-Eigenschaftswertfalsy aber nichtundefinedist (selbst wenn alles andere intakt bleibt, wieexecund[Symbol.replace]()), kann verwendet werden, als ob es kein Regex wäre. - Ein Nicht-
RegExp-Objekt mit einerSymbol.match-Eigenschaft wird behandelt, als wäre es ein Regex.
Diese Wahl wurde getroffen, weil[Symbol.match]() die am besten indizierende Eigenschaft ist, dass etwas zum Abgleichen verwendet werden soll. (exec könnte auch verwendet werden, aber da es keine Symbol-Eigenschaft ist, würde es zu viele Fehlalarme geben.) Zu den Stellen, die Regexe speziell behandeln, gehören:
String.prototype.endsWith(),startsWith()undincludes()werfen einenTypeError, wenn das erste Argument ein Regex ist.String.prototype.matchAll()undreplaceAll()überprüfen, ob dasglobale Flag gesetzt ist, wenn das erste Argument ein Regex ist, bevor seine[Symbol.matchAll]()oder[Symbol.replace]()Methode aufgerufen wird.- Der
RegExp()Konstruktor gibt direkt daspattern-Argument nur dann zurück, wennpatternein Regex ist (neben einigen anderen Bedingungen). Wennpatternein Regex ist, würde es auch diesource- undflags-Eigenschaften vonpatternabfragen, anstattpatternin einen String zu zwingen.
Zum Beispiel würdeString.prototype.endsWith() alle Eingaben in Strings umwandeln, aber es würde eine Ausnahme auslösen, wenn das Argument ein Regex ist, da es nur zum Abgleichen von Strings gedacht ist und die Verwendung eines Regex wahrscheinlich ein Entwicklerfehler ist.
"foobar".endsWith({ toString: () => "bar" }); // true"foobar".endsWith(/bar/); // TypeError: First argument to String.prototype.endsWith must not be a regular expressionSie können die Prüfung umgehen, indem Sie[Symbol.match] auf einenfalsy Wert setzen, der nichtundefined ist. Dies würde bedeuten, dass das Regex nicht fürString.prototype.match() verwendet werden kann (da ohne[Symbol.match],match() ein neuesRegExp-Objekt mit den zwei durchre.toString() hinzugefügten umschließenden Schrägstrichen konstruieren würde), aber es kann für praktisch alles andere verwendet werden.
const re = /bar/g;re[Symbol.match] = false;"/bar/g".endsWith(re); // truere.exec("bar"); // [ 'bar', index: 0, input: 'bar', groups: undefined ]"bar & bar".replace(re, "foo"); // 'foo & foo'Perl-ähnliche Eigenschaften von RegExp
Beachten Sie, dass mehrere derRegExp-Eigenschaften sowohl lange als auch kurze (Perl-ähnliche) Namen haben. Beide Namen beziehen sich immer auf denselben Wert. (Perl ist die Programmiersprache, nach der sich JavaScript bei der Modellierung seiner regulären Ausdrücke gerichtet hat.) Siehe auchveralteteRegExp-Eigenschaften.
Konstruktor
RegExp()Erstellt ein neues
RegExp-Objekt.
Statische Eigenschaften
RegExp.$1, …,RegExp.$9VeraltetStatische, schreibgeschützte Eigenschaften, die geklammerte Teilstring-Übereinstimmungen enthalten.
RegExp.input($_)VeraltetEine statische Eigenschaft, die den letzten String enthält, gegen den ein regulärer Ausdruck erfolgreich abgeglichen wurde.
RegExp.lastMatch($&)VeraltetEine statische, schreibgeschützte Eigenschaft, die den letzten übereinstimmenden Teilstring enthält.
RegExp.lastParen($+)VeraltetEine statische, schreibgeschützte Eigenschaft, die die letzte geklammerte Teilstring-Übereinstimmung enthält.
RegExp.leftContext($`)VeraltetEine statische, schreibgeschützte Eigenschaft, die den Teilstring vor der zuletzt gefundenen Übereinstimmung enthält.
RegExp.rightContext($')VeraltetEine statische, schreibgeschützte Eigenschaft, die den Teilstring nach der zuletzt gefundenen Übereinstimmung enthält.
RegExp[Symbol.species]Die Konstruktorfunktion, die verwendet wird, um abgeleitete Objekte zu erstellen.
Statische Methoden
RegExp.escape()Entfernt alle potenziellen Regex-Syntaxzeichen aus einem String und gibt einen neuen String zurück, der sicher alsliteral Muster für den
RegExp()Konstruktor verwendet werden kann.
Instanz-Eigenschaften
Diese Eigenschaften sind aufRegExp.prototype definiert und werden von allenRegExp-Instanzen geteilt.
RegExp.prototype.constructorDie Konstruktorfunktion, die das Instanz-Objekt erstellt hat. Für
RegExp-Instanzen ist der Anfangswert derRegExp-Konstruktor.RegExp.prototype.dotAllOb
.Zeilenumbrüche abgleicht oder nicht.RegExp.prototype.flagsEin String, der die Flags des
RegExp-Objekts enthält.RegExp.prototype.globalOb der reguläre Ausdruck gegen alle möglichen Übereinstimmungen in einem String getestet werden soll oder nur gegen die erste.
RegExp.prototype.hasIndicesOb das Ergebnis des regulären Ausdrucks die Anfangs- und Endindices der erfassten Teilstrings freilegt.
RegExp.prototype.ignoreCaseOb die Groß-/Kleinschreibung beim Versuch eines Abgleichs in einem String ignoriert werden soll.
RegExp.prototype.multilineOb in Strings über mehrere Zeilen hinweg gesucht werden soll oder nicht.
RegExp.prototype.sourceDer Text des Musters.
RegExp.prototype.stickyOb die Suche "sticky" ist oder nicht.
RegExp.prototype.unicodeOb Unicode-Funktionen aktiviert sind oder nicht.
RegExp.prototype.unicodeSetsOb das
v-Flag, ein Upgrade desu-Modus, aktiviert ist oder nicht.
Diese Eigenschaften sind eigene Eigenschaften jederRegExp-Instanz.
lastIndexDer Index, an dem die nächste Übereinstimmung starten soll.
Instanz-Methoden
RegExp.prototype.compile()VeraltetKompiliert den regulären Ausdruck während der Ausführung eines Skripts neu.
RegExp.prototype.exec()Führt eine Suche nach einer Übereinstimmung in seinem Zeichenkettenparameter aus.
RegExp.prototype.test()Testet eine Übereinstimmung in seinem Zeichenkettenparameter.
RegExp.prototype.toString()Gibt einen String zurück, der das angegebene Objekt darstellt. Überschreibt die
Object.prototype.toString()Methode.RegExp.prototype[Symbol.match]()Führt den Abgleich mit der angegebenen Zeichenfolge durch und gibt das Übereinstimmungsergebnis zurück.
RegExp.prototype[Symbol.matchAll]()Gibt alle Übereinstimmungen des regulären Ausdrucks gegen eine Zeichenfolge zurück.
RegExp.prototype[Symbol.replace]()Ersetzt Übereinstimmungen in der angegebenen Zeichenfolge durch einen neuen Teilstring.
RegExp.prototype[Symbol.search]()Sucht die Übereinstimmung in der angegebenen Zeichenfolge und gibt den Index zurück, an dem das Muster in der Zeichenfolge gefunden wurde.
RegExp.prototype[Symbol.split]()Teilt die angegebene Zeichenfolge in ein Array, indem die Zeichenfolge in Teilstrings getrennt wird.
Beispiele
>Verwendung eines regulären Ausdrucks zur Änderung des Datenformats
Das folgende Skript verwendet dieString.prototype.replace() Methode, um einen Namen im FormatVorname Nachname abzugleichen und in das FormatNachname, Vorname auszugeben.
Im Ersetzungstext verwendet das Skript$1 und$2, um die Ergebnisse der entsprechenden Klammerausdrücke im regulären Ausdrucksmuster anzugeben.
const re = /(\w+)\s(\w+)/;const str = "Maria Cruz";const newStr = str.replace(re, "$2, $1");console.log(newStr);Dies zeigt"Cruz, Maria" an.
Verwendung eines regulären Ausdrucks zum Aufteilen von Zeilen mit unterschiedlichen Zeilenendungen/Enden von Zeilen/Zeilenumbrüchen
Das Standard-Zeilenende variiert je nach Plattform (Unix, Windows, etc.). Die Zeilenaufteilung, die in diesem Beispiel bereitgestellt wird, funktioniert auf allen Plattformen.
const text = "Some text\nAnd some more\r\nAnd yet\nThis is the end";const lines = text.split(/\r?\n/);console.log(lines); // [ 'Some text', 'And some more', 'And yet', 'This is the end' ]Beachten Sie, dass die Reihenfolge der Muster im regulären Ausdruck von Bedeutung ist.
Verwendung eines regulären Ausdrucks über mehrere Zeilen
Standardmäßig stimmt das Zeichen. nicht mit Zeilenumbrüchen überein. Um es mit Zeilenumbrüchen übereinstimmen zu lassen, verwenden Sie dass-Flag (dotAll-Modus).
const s = "Please yes\nmake my day!";s.match(/yes.*day/);// Returns nulls.match(/yes.*day/s);// Returns ["yes\nmake my day"]Verwendung eines regulären Ausdrucks mit dem Sticky-Flag
Dassticky-Flag zeigt an, dass der reguläre Ausdruck eine Sticky-Übereinstimmung in der Zielzeichenfolge durchführt, indem versucht wird, abzuklären abRegExp.prototype.lastIndex zu beginnen.
const str = "#foo#";const regex = /foo/y;regex.lastIndex = 1;regex.test(str); // trueregex.lastIndex = 5;regex.test(str); // false (lastIndex is taken into account with sticky flag)regex.lastIndex; // 0 (reset after match failure)Der Unterschied zwischen dem Sticky-Flag und dem globalen Flag
Mit dem Sticky-Flagy muss das nächste Match an derlastIndex-Position stattfinden, während mit dem globalen Flagg das Match an derlastIndex-Position oder später stattfinden kann:
const re = /\d/y;let r;while ((r = re.exec("123 456"))) { console.log(r, "AND re.lastIndex", re.lastIndex);}// [ '1', index: 0, input: '123 456', groups: undefined ] AND re.lastIndex 1// [ '2', index: 1, input: '123 456', groups: undefined ] AND re.lastIndex 2// [ '3', index: 2, input: '123 456', groups: undefined ] AND re.lastIndex 3// … and no more match.Mit dem globalen Flagg würden alle 6 Ziffern abgeglichen, nicht nur 3.
Regulärer Ausdruck und Unicode-Zeichen
\w und\W stimmen nur mit Zeichen auf ASCII-Basis überein, zum Beispiel vona bisz,A bisZ,0 bis9 und_.
Um Zeichen aus anderen Sprachen wie Kyrillisch oder Hebräisch abzugleichen, verwenden Sie\uHHHH, wobeiHHHH der Unicode-Wert des Zeichens in Hexadezimaldarstellung ist.
Dieses Beispiel zeigt, wie man Unicode-Zeichen aus einem Wort heraustrennen kann.
const text = "Образец text на русском языке";const regex = /[\u0400-\u04ff]+/g;const match = regex.exec(text);console.log(match[0]); // 'Образец'console.log(regex.lastIndex); // 7const match2 = regex.exec(text);console.log(match2[0]); // 'на' (did not log 'text')console.log(regex.lastIndex); // 15// and so onDieUnicode-Eigenschafts-Eskapaden Funktion bietet eine einfachere Möglichkeit, bestimmte Unicode-Bereiche zu anvisieren, indem Erklärungen wie\p{scx=Cyrl} (um einen beliebigen kyrillischen Buchstaben abzugleichen) oder\p{L}/u (um einen Buchstaben aus jeder Sprache abzugleichen) erlaubt werden.
Extrahierung des Subdomainnamens aus einer URL
const url = "http://xxx.example.com";console.log(/^https?:\/\/(.+?)\./.exec(url)[1]); // 'xxx'Hinweis:Anstatt reguläre Ausdrücke zu verwenden, um URLs zu parsen, ist es normalerweise besser, den eingebauten URL-Parser des Browsers mit der Verwendung derURL API zu verwenden.
Erstellung eines regulären Ausdrucks aus dynamischen Eingaben
const breakfasts = ["bacon", "eggs", "oatmeal", "toast", "cereal"];const order = "Let me get some bacon and eggs, please";order.match(new RegExp(`\\b(${breakfasts.join("|")})\\b`, "g"));// Returns ['bacon', 'eggs']Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-regexp-regular-expression-objects> |
Browser-Kompatibilität
Firefox-spezifische Hinweise
Beginnend mit Firefox 34 ist im Fall einer Fanggruppe mit Quantoren, die deren Ausführung verhindern, der abgeglichene Text für eine Fanggruppe jetztundefined anstelle eines leeren Strings:
// Firefox 33 or older"x".replace(/x(.)?/g, (m, group) => { console.log(`group: ${JSON.stringify(group)}`);});// group: ""// Firefox 34 or newer"x".replace(/x(.)?/g, (m, group) => { console.log(`group: ${group}`);});// group: undefinedBeachten Sie, dass aufgrund der WebkompatibilitätRegExp.$N weiterhin einen leeren String anstelle vonundefined zurückgeben wird (Bug 1053944).