RegExp.prototype[Symbol.search]()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Die Methode [Symbol.search]()
von RegExp
-Instanzen gibt an, wie String.prototype.search
funktionieren soll.
Probieren Sie es aus
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 wird intern in String.prototype.search()
aufgerufen. Zum Beispiel liefern die folgenden zwei Beispiele das gleiche Ergebnis.
"abc".search(/a/);
/a/[Symbol.search]("abc");
Diese Methode kopiert den regulären Ausdruck nicht, im Gegensatz zu [Symbol.split]()
oder [Symbol.matchAll]()
. Anders als [Symbol.match]()
oder [Symbol.replace]()
wird allerdings das lastIndex
beim Start der Ausführung auf 0 gesetzt und beim Verlassen auf den vorherigen Wert zurückgesetzt, wodurch Nebeneffekte im Allgemeinen vermieden werden. Dies bedeutet, dass das g
-Flag bei dieser Methode keine Wirkung hat und sie immer den ersten Treffer im String zurückgibt, selbst wenn lastIndex
ungleich null ist. Sticky-RegExps werden außerdem 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' ]
[Symbol.search]()
ruft immer genau einmal die Methode exec()
des Regex auf und gibt die Eigenschaft index
des Ergebnisses zurück, oder -1
, wenn das Ergebnis null
ist.
Diese Methode existiert, um das Suchverhalten in RegExp
-Unterklassen anzupassen.
Beispiele
Direkter Aufruf
Diese Methode kann nahezu auf die gleiche Weise wie String.prototype.search()
verwendet werden, mit Ausnahme des anderen Wertes 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 Methode [Symbol.search]()
ü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
Specification |
---|
ECMAScript Language Specification # sec-regexp.prototype-%symbol.search% |
Browser-Kompatibilität
BCD tables only load in the browser