Baseline Widely available
Die [Symbol.match]()
Methode von RegExp
-Instanzen gibt an, wie String.prototype.match()
sich verhalten soll. Zusätzlich kann ihre Anwesenheit (oder Abwesenheit) beeinflussen, ob ein Objekt als regulärer Ausdruck betrachtet wird.
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
str
Ein String
, der Ziel des Abgleichs ist.
Ein Array
, dessen Inhalt von der Anwesenheit oder Abwesenheit des globalen (g
) Flags abhängt, oder null
, wenn keine Ãbereinstimmungen gefunden werden.
g
Flag verwendet wird, werden alle Ergebnisse, die dem kompletten regulären Ausdruck entsprechen, zurückgegeben, aber Erfassungsgruppen sind nicht enthalten.g
Flag nicht verwendet wird, wird nur die erste vollständige Ãbereinstimmung und ihre zugehörigen Erfassungsgruppen zurückgegeben. In diesem Fall liefert match()
das gleiche Ergebnis wie RegExp.prototype.exec()
(ein Array mit einigen zusätzlichen Eigenschaften).Diese Methode wird intern in String.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 dem g
Flag), wird die exec()
Methode des regulären Ausdrucks wiederholt aufgerufen, bis exec()
null
zurückgibt. Andernfalls würde exec()
nur einmal aufgerufen und dessen Ergebnis würde der Rückgabewert von [Symbol.match]()
.
Da [Symbol.match]()
exec()
so lange aufruft, bis es null
zurückgibt, und exec()
den lastIndex
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 jedoch sticky aber nicht global ist, würde lastIndex
nicht zurückgesetzt. In diesem Fall kann jeder Aufruf von match()
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' ] 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 des lastIndex
finden.
console.log("ab-c".match(/[abc]/gy)); // [ 'a', 'b' ]
Wenn die aktuelle Ãbereinstimmung ein leerer String ist, würde der lastIndex
trotzdem weitergeschoben â wenn der reguläre Ausdruck Unicode-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 von RegExp
Unterklassen anzupassen.
Zusätzlich wird die [Symbol.match]
-Eigenschaft verwendet, um zu überprüfen, ob ein Objekt ein regulärer Ausdruck ist.
Diese Methode kann auf fast die gleiche Weise wie String.prototype.match()
verwendet werden, auÃer dem unterschiedlichen this
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 von RegExp
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)); // 2016
console.log(result.group(2)); // 01
console.log(result.group(3)); // 02
Spezifikationen Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4