Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. RegExp
  6. [Symbol.match]()

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

View in EnglishAlways switch to English

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.

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

js
regexp[Symbol.match](str)

Parameter

str

EinString, der Ziel des Abgleichs ist.

Rückgabewert

EinArray, dessen Inhalt von der Anwesenheit oder Abwesenheit des globalen (g) Flags abhängt, odernull, wenn keine Übereinstimmungen gefunden werden.

  • Wenn dasg Flag verwendet wird, werden alle Ergebnisse, die dem kompletten regulären Ausdruck entsprechen, zurückgegeben, aber Erfassungsgruppen sind nicht enthalten.
  • Wenn dasg Flag 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.

js
"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.

js
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' ] 1

Wenn 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.

js
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.

js
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.

js
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.

js
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)); // 02

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-regexp.prototype-%symbol.match%

Browser-Kompatibilität

Siehe auch

Help improve MDN

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

[8]ページ先頭

©2009-2026 Movatter.jp