RegExp.prototype[Symbol.search]()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2016 browserübergreifend verfügbar.
Die [Symbol.search]() Methode von RegExp-Instanzen gibt an, wie String.prototype.search sich verhalten soll.
Probieren Sie es aus
class RegExp1 extends RegExp {
constructor(str) {
super(str);
this.pattern = str;
}
[Symbol.search](str) {
return str.indexOf(this.pattern);
}
}
console.log("table football".search(new RegExp1("foo")));
// Expected output: 6
Syntax
regexp[Symbol.search](str)
Parameter
Rückgabewert
Der Index des ersten Treffers zwischen dem regulären Ausdruck und dem gegebenen String, oder -1, wenn kein Treffer gefunden wurde.
Beschreibung
Diese Methode existiert, um das Suchverhalten in RegExp-Unterklassen anzupassen. Sie wird intern in String.prototype.search() aufgerufen. Zum Beispiel geben die folgenden zwei Beispiele das gleiche Ergebnis zurück.
"abc".search(/a/);
/a/[Symbol.search]("abc");
[Symbol.search]() ruft immer die exec()-Methode des regulären Ausdrucks genau einmal auf und gibt die index-Eigenschaft des Ergebnisses zurück, oder -1, wenn das Ergebnis null ist. Das g-Flag hat bei dieser Methode keine Wirkung.
Diese Methode kopiert den regulären Ausdruck nicht, im Gegensatz zu [Symbol.split]() oder [Symbol.matchAll](). Im Unterschied zu [Symbol.match]() oder [Symbol.replace]() wird jedoch immer lastIndex auf 0 gesetzt, wenn die Ausführung beginnt, und beim Beenden auf den vorherigen Wert zurückgesetzt, um im Allgemeinen Nebenwirkungen zu vermeiden. Das bedeutet, dass immer der erste Treffer im String zurückgegeben wird, auch wenn lastIndex ungleich null ist, und Sticky-Regexe immer strikt am Anfang des Strings suchen.
const re = /[abc]/g;
re.lastIndex = 2;
console.log("abc".search(re)); // 0
const re2 = /[bc]/y;
re2.lastIndex = 1;
console.log("abc".search(re2)); // -1
console.log("abc".match(re2)); // [ 'b' ]
Beispiele
>Direkter Aufruf
Diese Methode kann auf fast die gleiche Weise wie String.prototype.search() verwendet werden, mit Ausnahme des unterschiedlichen Werts von this und der unterschiedlichen Reihenfolge der Argumente.
const re = /-/g;
const str = "2016-01-02";
const result = re[Symbol.search](str);
console.log(result); // 4
Verwendung von [Symbol.search]() in Unterklassen
Unterklassen von RegExp können die [Symbol.search]() Methode überschreiben, um das Verhalten zu ändern.
class MyRegExp extends RegExp {
constructor(str) {
super(str);
this.pattern = str;
}
[Symbol.search](str) {
return str.indexOf(this.pattern);
}
}
const re = new MyRegExp("a+b");
const str = "ab a+b";
const result = str.search(re); // String.prototype.search calls re[Symbol.search]().
console.log(result); // 3
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-regexp.prototype-%symbol.search%> |