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

js
regexp[Symbol.search](str)

Parameter

str

Ein String, der das Ziel der Suche ist.

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.

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

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

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

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

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
[Symbol.search]

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Siehe auch