Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
RegExp.prototype[Symbol.match]()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
Die[Symbol.match]() Methode vonRegExp-Instanzen gibt an, wieString.prototype.match() sich verhalten soll. Zusätzlich kann ihre Anwesenheit (oder Abwesenheit) beeinflussen, ob ein Objekt als regulärer Ausdruck betrachtet wird.
In diesem Artikel
Probieren Sie es aus
class RegExp1 extends RegExp { [Symbol.match](str) { const result = RegExp.prototype[Symbol.match].call(this, str); if (result) { return "VALID"; } return "INVALID"; }}console.log("2012-07-02".match(new RegExp1("(\\d+)-(\\d+)-(\\d+)")));// Expected output: "VALID"Syntax
regexp[Symbol.match](str)Parameter
Rückgabewert
EinArray, dessen Inhalt von der Anwesenheit oder Abwesenheit des globalen (g) Flags abhängt, odernull, wenn keine Übereinstimmungen gefunden werden.
- Wenn das
gFlag verwendet wird, werden alle Ergebnisse, die dem kompletten regulären Ausdruck entsprechen, zurückgegeben, aber Erfassungsgruppen sind nicht enthalten. - Wenn das
gFlag nicht verwendet wird, wird nur die erste vollständige Übereinstimmung und ihre zugehörigen Erfassungsgruppen zurückgegeben. In diesem Fall liefertmatch()das gleiche Ergebnis wieRegExp.prototype.exec()(ein Array mit einigen zusätzlichen Eigenschaften).
Beschreibung
Diese Methode wird intern inString.prototype.match() aufgerufen.
Zum Beispiel geben die folgenden zwei Beispiele das gleiche Ergebnis zurück.
"abc".match(/a/);/a/[Symbol.match]("abc");Wenn der reguläre Ausdruck global ist (mit demg Flag), wird dieexec() Methode des regulären Ausdrucks wiederholt aufgerufen, bisexec()null zurückgibt. Andernfalls würdeexec() nur einmal aufgerufen und dessen Ergebnis würde der Rückgabewert von[Symbol.match]().
Da[Symbol.match]()exec() so lange aufruft, bis esnull zurückgibt, undexec() denlastIndex des regulären Ausdrucks automatisch auf 0 zurücksetzt, wenn die letzte Übereinstimmung fehlschlägt, würde[Symbol.match]() typischerweise keine Nebeneffekte haben, wenn es beendet wird. Wenn der reguläre Ausdruck jedochsticky aber nicht global ist, würdelastIndex nicht zurückgesetzt. In diesem Fall kann jeder Aufruf vonmatch() ein anderes Ergebnis liefern.
const re = /[abc]/y;for (let i = 0; i < 5; i++) { console.log("abc".match(re), re.lastIndex);}// [ 'a' ] 1// [ 'b' ] 2// [ 'c' ] 3// null 0// [ 'a' ] 1Wenn der reguläre Ausdruck sticky und global ist, würde er weiterhin sticky Übereinstimmungen durchführen — d.h. er würde keine Vorkommen jenseits deslastIndex finden.
console.log("ab-c".match(/[abc]/gy)); // [ 'a', 'b' ]Wenn die aktuelle Übereinstimmung ein leerer String ist, würde derlastIndex trotzdem weitergeschoben — wenn der reguläre AusdruckUnicode-bewusst ist, würde er um einen Unicode-Codepunkt weitergeschoben; andernfalls wird er um eine UTF-16-Codeeinheit weitergeschoben.
console.log("😄".match(/(?:)/g)); // [ '', '', '' ]console.log("😄".match(/(?:)/gu)); // [ '', '' ]Diese Methode existiert, um das Abgleichverhalten innerhalb vonRegExp Unterklassen anzupassen.
Zusätzlich wird die[Symbol.match]-Eigenschaft verwendet, um zu überprüfen,ob ein Objekt ein regulärer Ausdruck ist.
Beispiele
>Direkter Aufruf
Diese Methode kann auffast die gleiche Weise wieString.prototype.match() verwendet werden, außer dem unterschiedlichenthis und der unterschiedlichen Argumentreihenfolge.
const re = /\d+/g;const str = "2016-01-02";const result = re[Symbol.match](str);console.log(result); // ["2016", "01", "02"]Verwendung von[Symbol.match]() in Unterklassen
Unterklassen vonRegExp können die[Symbol.match]() Methode überschreiben, um das Standardverhalten zu ändern.
class MyRegExp extends RegExp { [Symbol.match](str) { const result = RegExp.prototype[Symbol.match].call(this, str); if (!result) return null; return { group(n) { return result[n]; }, }; }}const re = new MyRegExp("(\\d+)-(\\d+)-(\\d+)");const str = "2016-01-02";const result = str.match(re); // String.prototype.match calls re[Symbol.match]().console.log(result.group(1)); // 2016console.log(result.group(2)); // 01console.log(result.group(3)); // 02Spezifikationen
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-regexp.prototype-%symbol.match%> |