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 Methode [Symbol.search]() von RegExp-Instanzen legt fest, wie sich String.prototype.search 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 der ersten Übereinstimmung zwischen dem regulären Ausdruck und dem angegebenen String oder -1, wenn keine Übereinstimmung gefunden wurde.
Beschreibung
Diese Methode ermöglicht es, das Suchverhalten in RegExp-Unterklassen anzupassen. Sie wird intern von String.prototype.search() aufgerufen. Die folgenden beiden Beispiele liefern dasselbe Ergebnis.
"abc".search(/a/);
/a/[Symbol.search]("abc");
[Symbol.search]() ruft die exec()-Methode des regulären Ausdrucks immer 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.
Anders als [Symbol.split]() oder [Symbol.matchAll]() kopiert diese Methode den regulären Ausdruck nicht. Im Gegensatz zu [Symbol.match]() oder [Symbol.replace]() setzt sie lastIndex jedoch vor Beginn der Ausführung immer auf 0 und stellt beim Beenden den vorherigen Wert wieder her. Dadurch werden Nebenwirkungen im Allgemeinen vermieden. Das bedeutet, dass sie immer die erste Übereinstimmung im String zurückgibt, selbst wenn lastIndex nicht 0 ist. Reguläre Ausdrücke mit dem y-Flag suchen dabei immer ausschließlich am Anfang des Strings.
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 fast genauso wie String.prototype.search() verwendet werden. Lediglich der Wert von this und die Reihenfolge der Argumente unterscheiden sich.
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 Methode [Symbol.search]() überschreiben, um ihr 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%> |