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 September 2016.

Die [Symbol.search]() Methode von RegExp Instanzen spezifiziert, 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

js
regexp[Symbol.search](str)

Parameter

str

Ein String, der Ziel der Suche ist.

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 dasselbe Ergebnis.

js
"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 jedoch lastIndex beim Start der Ausführung auf 0 gesetzt und nach Beendigung auf den vorherigen Wert zurückgesetzt, wodurch Seiteneffekte im Allgemeinen vermieden werden. Das bedeutet, dass das g-Flag keine Wirkung auf diese Methode hat und immer den ersten Treffer im String zurückgibt, selbst wenn lastIndex nicht null ist. Das bedeutet auch, dass sticky Regexps immer strikt am Anfang des Strings suchen.

js
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 exec() Methode des Regex auf und gibt die index-Eigenschaft 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 fast auf dieselbe Weise wie String.prototype.search() verwendet werden, außer dass sich der Wert von this und die Argumentreihenfolge unterscheiden.

js
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.

js
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® 2026 Language Specification
# sec-regexp.prototype-%symbol.search%

Browser-Kompatibilität

Siehe auch