Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. String
  6. matchAll()

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

String.prototype.matchAll()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨Januar 2020⁩.

DiematchAll()-Methode vonString-Werten gibt einen Iterator für alle Ergebnisse zurück, die dieser Zeichenkette mit einemregulären Ausdruck entsprechen, einschließlichCapturing-Gruppen.

Probieren Sie es aus

const regexp = /t(e)(st(\d?))/g;const str = "test1test2";const array = [...str.matchAll(regexp)];console.log(array[0]);// Expected output: Array ["test1", "e", "st1", "1"]console.log(array[1]);// Expected output: Array ["test2", "e", "st2", "2"]

Syntax

js
matchAll(regexp)

Parameter

regexp

Ein reguläres Ausdrucksobjekt oder ein beliebiges Objekt, das eineSymbol.matchAll-Methode hat.

Wennregexp keinRegExp-Objekt ist und keineSymbol.matchAll-Methode hat, wird es implizit in einRegExp umgewandelt, indemnew RegExp(regexp, 'g') verwendet wird.

Wennregexpein Regex ist, dann muss es das globale (g)-Flag gesetzt haben, sonst wird einTypeError ausgelöst.

Rückgabewert

Einiterables Iterator-Objekt (das nicht neu gestartet werden kann) von Übereinstimmungen oder ein leerer Iterator, wenn keine Übereinstimmungen gefunden werden. Jeder vom Iterator zurückgegebene Wert ist ein Array mit derselben Form wie der Rückgabewert vonRegExp.prototype.exec().

Ausnahmen

TypeError

Wird ausgelöst, wenn dasregexpein Regex ist, das nicht das globale (g)-Flag gesetzt hat (seineflags -Eigenschaft enthält kein"g").

Beschreibung

Die Implementierung vonString.prototype.matchAll macht nicht viel mehr, als dieSymbol.matchAll-Methode des Arguments mit der Zeichenkette als erstem Parameter aufzurufen (abgesehen von der zusätzlichen Eingabevalidierung, dass der Regex global ist). Die eigentliche Implementierung kommt vonRegExp.prototype[Symbol.matchAll]().

Beispiele

Regexp.prototype.exec() und matchAll()

OhnematchAll() ist es möglich, Aufrufe vonregexp.exec() (und Regexe mit demg-Flag) in einer Schleife zu verwenden, um alle Übereinstimmungen zu erhalten:

js
const regexp = /foo[a-z]*/g;const str = "table football, foosball";let match;while ((match = regexp.exec(str)) !== null) {  console.log(    `Found ${match[0]} start=${match.index} end=${regexp.lastIndex}.`,  );}// Found football start=6 end=14.// Found foosball start=16 end=24.

MitmatchAll() können Sie diewhile-Schleife undexec mitg vermeiden. Stattdessen erhalten Sie einen Iterator, den Sie mit den bequemerenfor...of,Array Spread oderArray.from()-Konstruktionen verwenden können:

js
const regexp = /foo[a-z]*/g;const str = "table football, foosball";const matches = str.matchAll(regexp);for (const match of matches) {  console.log(    `Found ${match[0]} start=${match.index} end=${      match.index + match[0].length    }.`,  );}// Found football start=6 end=14.// Found foosball start=16 end=24.// matches iterator is exhausted after the for...of iteration// Call matchAll again to create a new iteratorArray.from(str.matchAll(regexp), (m) => m[0]);// [ "football", "foosball" ]

matchAll wird eine Ausnahme auslösen, wenn dasg-Flag fehlt.

js
const regexp = /[a-c]/;const str = "abc";str.matchAll(regexp);// TypeError

matchAll erstellt intern eine Kopie desregexp — anders als beiregexp.exec() ändert sichlastIndex nicht, während die Zeichenkette durchsucht wird.

js
const regexp = /[a-c]/g;regexp.lastIndex = 1;const str = "abc";Array.from(str.matchAll(regexp), (m) => `${regexp.lastIndex} ${m[0]}`);// [ "1 b", "1 c" ]

Dies bedeutet jedoch, dass Sie im Gegensatz zur Verwendung vonregexp.exec() in einer SchleifelastIndex nicht ändern können, um das Regex vor- oder zurückzusetzen.

Besserer Zugriff auf Capturing-Gruppen (als String.prototype.match())

Ein weiterer überzeugender Grund fürmatchAll ist der verbesserte Zugang zu Capturing-Gruppen.

Capturing-Gruppen werden ignoriert, wennmatch() mit dem globaleng-Flag verwendet wird:

js
const regexp = /t(e)(st(\d?))/g;const str = "test1test2";str.match(regexp); // ['test1', 'test2']

MitmatchAll können Sie leicht auf Capturing-Gruppen zugreifen:

js
const array = [...str.matchAll(regexp)];array[0];// ['test1', 'e', 'st1', '1', index: 0, input: 'test1test2', length: 4]array[1];// ['test2', 'e', 'st2', '2', index: 5, input: 'test1test2', length: 4]

Verwendung von matchAll() mit einem Nicht-RegExp-Objekt, das[Symbol.matchAll]() implementiert

Wenn ein Objekt eineSymbol.matchAll-Methode hat, kann es als benutzerdefinierter Matcher verwendet werden. Der Rückgabewert vonSymbol.matchAll wird zum Rückgabewert vonmatchAll().

js
const str = "Hmm, this is interesting.";str.matchAll({  [Symbol.matchAll](str) {    return [["Yes, it's interesting."]];  },}); // returns [["Yes, it's interesting."]]

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-string.prototype.matchall

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp