W3docs

JavaScript RegExp-Methoden

Reguläre Ausdrücke in JavaScript ermöglichen das Suchen, Abgleichen und Manipulieren von Zeichenketten. Dieser Leitfaden behandelt die wichtigsten Methoden.

Reguläre Ausdrücke in JavaScript sind eine leistungsstarke Möglichkeit, Zeichenketten zu suchen, abzugleichen und zu manipulieren. Dieser Leitfaden behandelt die wichtigsten Methoden, die Sie auf einem regulären Ausdruck (test, exec) und auf einem string (search, split, match, matchAll, replace, replaceAll) aufrufen, mit einem ausführbaren Beispiel und der tatsächlichen Rückgabeform für jede Methode. Das Verstehen dieser Methoden ermöglicht es Ihnen, Musterabgleiche in Ihrem Code effizient zu handhaben.

Ein kurzer Regex-Überblick

Bevor wir zu den Methoden kommen, eine kurze Einführung für Leser, die neu im Umgang mit regulären Ausdrücken sind.

Ein Regex-Literal wird zwischen Schrägstrichen geschrieben, optional gefolgt von Flags:

/pattern/flags   // e.g. /hello/gi

Sie können auch einen regulären Ausdruck dynamisch mit dem RegExp-Konstruktor erstellen, was nützlich ist, wenn das Muster aus einer Variablen stammt (beachten Sie, dass Backslashes innerhalb eines string verdoppelt werden müssen):

const word = "hello";
const regex = new RegExp(word, "gi"); // same as /hello/gi
const digits = new RegExp("\\d+");    // same as /\d+/

Die Flags ändern das Verhalten beim Abgleichen:

FlagNameWirkung
gglobalAlle Treffer finden, anstatt beim ersten aufzuhören.
iignore caseAbgleich ohne Berücksichtigung der Groß-/Kleinschreibung.
mmultiline^ und $ treffen bei Zeilenumbrüchen, nicht nur an Zeichenkettenenden.
sdotAll. trifft auch auf Zeilenumbruchzeichen.
uunicodeDas Muster als Folge von Unicode-Codepunkten behandeln.
ystickyNur exakt ab lastIndex abgleichen.

Für die vollständige Mustersyntax und Flag-Details, siehe JavaScript Patterns and Flags und Capturing Groups. Viele der nachfolgenden Methoden sind auch von der string-Seite in JavaScript Strings dokumentiert.

RegExp.test()

Die test()-Methode prüft einen string auf einen Treffer mit einem regulären Ausdruck. Sie gibt true zurück, wenn ein Treffer gefunden wird, andernfalls false.

Beispiel

javascript— editable

In diesem Beispiel prüft die test()-Methode, ob der string "Hello world!" das Muster "hello" enthält. Da die Methode zwischen Groß- und Kleinschreibung unterscheidet, gibt sie false zurück. Fügen Sie das i-Flag hinzu (/hello/i), würde sie true zurückgeben.

RegExp.exec()

Die exec()-Methode sucht in einem string nach einem Treffer mit einem regulären Ausdruck. Sie gibt ein array zurück, das den gefundenen Text und Capture-Gruppen enthält, oder null, wenn kein Treffer gefunden wird. Der zurückgegebene Wert ist kein einfaches array: Er trägt auch index (wo der Treffer begann), input (den ursprünglichen string) und groups (benannte Capture-Gruppen, oder undefined, wenn keine vorhanden sind).

Beispiel

javascript— editable

Hier findet exec() eine oder mehrere Ziffern in "The year is 2024." Element 0 ist der vollständige Treffer, Element 1 ist die erste Capture-Gruppe (\d+), und die zusätzlichen Eigenschaften zeigen an, wo der Treffer gefunden wurde.

Die lastIndex-Falle mit /g

Wenn der reguläre Ausdruck das global-Flag (g) oder sticky-Flag (y) hat, wird exec() zustandsbehaftet: Jeder Aufruf setzt an der lastIndex-Eigenschaft des Regex fort und rückt sie vor, und gibt null zurück, sobald keine weiteren Treffer vorhanden sind. Rufen Sie es in einer Schleife auf, um durch jeden Treffer zu iterieren — beachten Sie jedoch, dass die Wiederverwendung desselben /g-Regex über unzusammenhängende Aufrufe hinweg zu überraschenden Ergebnissen führen kann, weil lastIndex gespeichert bleibt.

javascript— editable

Ohne das g-Flag ist exec() nicht zustandsbehaftet und gibt immer den ersten Treffer zurück, sodass eine solche while-Schleife endlos laufen würde. Für nicht-globale Verwendung bevorzugen Sie match() oder matchAll().

String.search()

Die search()-Methode prüft einen string auf einen Treffer mit einem regulären Ausdruck. Sie gibt den nullbasierten Index des ersten Treffers zurück, oder -1, wenn kein Treffer gefunden wird.

Beispiel

javascript— editable

In diesem Beispiel gibt die search()-Methode den Index des ersten Vorkommens von "awesome" im string zurück, nämlich 14.

String.split()

Die split()-Methode teilt einen string in eine geordnete Liste von Teilzeichenketten auf und gibt diese als array zurück. Es handelt sich um eine universelle string-Methode: Das Trennzeichen kann ein einfacher string (str.split(",")) oder ein regulärer Ausdruck sein. Die Regex-Form ist lediglich ein Anwendungsfall, der sich anbietet, wenn das Trennzeichen variiert — zum Beispiel beim Aufteilen an einem oder mehreren Leerzeichen.

Beispiel

javascript— editable

Der erste Aufruf teilt an einem Literal-Komma auf; der zweite verwendet den Regex /\s+/, um an beliebigen Leerzeichen aufzuteilen, sodass mehrere Leerzeichen und Tabulatoren zu sauberen Trennzeichen zusammengefasst werden.

String.match()

Die match()-Methode ruft das Ergebnis des Abgleichs eines string mit einem regulären Ausdruck ab. Der Rückgabewert hängt von den Flags ab:

  • Mit /g: ein array aller gefundenen Teilzeichenketten (ohne index oder groups), oder null, wenn keine Treffer vorhanden sind.
  • Ohne /g: dasselbe umfangreiche array, das exec() zurückgibt — der erste Treffer plus Capture-Gruppen, mit index, input und groups — oder null, wenn kein Treffer vorhanden ist.

Da match() null anstelle eines leeren array zurückgibt, wenn nichts übereinstimmt, prüfen Sie das Ergebnis immer vor der Verwendung.

Beispiel

javascript— editable

Mit dem global-Flag gibt match() jedes Vorkommen von "ain" zurück; ein nicht übereinstimmendes Muster gibt null zurück, kein leeres array.

String.matchAll()

Die matchAll()-Methode gibt einen Iterator aller Treffer zurück, einschließlich Capture-Gruppen. Jedes Element, das sie liefert, ist ein vollständiges Treffer-array (ein RegExpMatchArray), mit derselben Form, die exec() erzeugt — so trägt jeder Treffer index, input und groups, nicht nur die übereinstimmenden Zeichenketten. Der reguläre Ausdruck muss das g-Flag haben, sonst wirft matchAll() einen TypeError. Im Gegensatz zu exec() in einer Schleife lässt matchAll() keinen übrig gebliebenen lastIndex auf Ihrem Regex, was es zur saubereren Wahl für die Iteration über jeden Treffer macht. (Erfordert ES2020+.)

Beispiel

javascript— editable

Da die Elemente echte Treffer-arrays sind, können Sie match.index und die erfassten Gruppen (match[1], match[2], …) für jedes Ergebnis auslesen. Wandeln Sie den Iterator mit Array.from(str.matchAll(regex)) oder dem Spread-Operator in ein array um, wenn Sie auf die Ergebnisse per Index zugreifen müssen.

String.replace()

Die replace()-Methode gibt einen neuen string zurück, bei dem Treffer des Musters ersetzt wurden (der ursprüngliche string wird niemals verändert). Mit einem einfachen string oder einem Regex ohne /g wird nur der erste Treffer ersetzt; fügen Sie das g-Flag hinzu, um alle zu ersetzen.

Der Ersetzungsstring unterstützt spezielle Token: $& ist der gesamte Treffer, $` und $' sind der Text davor/danach, $n fügt die n-te Capture-Gruppe ein, und $<name> fügt eine benannte Gruppe ein.

Beispiel

javascript— editable

Sie können auch eine Funktion als Ersetzung übergeben; sie empfängt den Treffer und die Capture-Gruppen als Argumente und gibt den Ersetzungstext zurück, was für berechnete Werte praktisch ist:

javascript— editable

String.replaceAll()

Die replaceAll()-Methode ersetzt jedes Vorkommen und gibt einen neuen string zurück. Wenn Sie ihr einen regulären Ausdruck übergeben, muss dieser Regex das g-Flag haben, sonst wirft er einen TypeError — dies schützt vor dem häufigen Fehler, zu erwarten, dass replace() global ist. Es unterstützt dieselben $1 / $<name>-Ersetzungstoken und Funktions-Replacer wie replace(). (Erfordert ES2021+.)

Beispiel

javascript— editable

Verwenden Sie replaceAll() mit einem einfachen string, wenn Sie einfach alle Kopien einer Literal-Teilzeichenkette ersetzen möchten; greifen Sie auf die Regex-Form zurück, wenn das Ziel ein Muster ist.

Fazit

Dieser Leitfaden hat die wichtigsten Methoden behandelt, die mit regulären Ausdrücken in JavaScript verwendet werden — test und exec auf der Regex-Seite sowie search, split, match, matchAll, replace und replaceAll auf der string-Seite — zusammen mit ihren tatsächlichen Rückgabeformen und dem zustandsbehafteten lastIndex-Verhalten des /g-Flags. Um tiefer in die Muster selbst einzusteigen, lesen Sie weiter mit Patterns and Flags, Capturing Groups und dem sticky y flag.

Übungen

Übung
Welche der folgenden Aussagen über reguläre Ausdrücke in JavaScript sind wahr?
Welche der folgenden Aussagen über reguläre Ausdrücke in JavaScript sind wahr?
Was this page helpful?