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
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 angegebenen String oder -1
, falls kein Treffer gefunden wurde.
Beschreibung
Diese Methode wird intern in String.prototype.search()
aufgerufen. Zum Beispiel liefern die folgenden beiden Beispiele dasselbe Ergebnis.
"abc".search(/a/);
/a/[Symbol.search]("abc");
Im Gegensatz zu [Symbol.split]()
oder [Symbol.matchAll]()
kopiert diese Methode den regulären Ausdruck nicht. Allerdings setzt sie – anders als [Symbol.match]()
oder [Symbol.replace]()
– lastIndex
bei Beginn der Ausführung auf 0 zurück und stellt diesen Wert beim Verlassen auf den vorherigen Wert wieder her, wodurch Nebeneffekte generell vermieden werden. Das bedeutet, dass das g
-Flag mit dieser Methode keine Wirkung hat und immer der erste Treffer im String zurückgegeben wird, selbst wenn lastIndex
ungleich null ist. Dies bedeutet auch, dass sticky RegExps stets streng 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 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.
Diese Methode dient der Anpassung des Suchverhaltens in Unterklassen von RegExp
.
Beispiele
Direkter Aufruf
Diese Methode kann fast auf dieselbe Weise wie String.prototype.search()
verwendet werden, mit Ausnahme des unterschiedlichen Wertes von this
und der anderen 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 modifizieren.
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® 2025 Language Specification # sec-regexp.prototype-%symbol.search% |
Browser-Kompatibilität
Report problems with this compatibility data on GitHubdesktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
[Symbol.search] |
Legend
Tip: you can click/tap on a cell for more information.
- Full support
- Full support