Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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 [Symbol.search]() Methode von RegExp-Instanzen gibt an, 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 das 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 existiert, um das Suchverhalten in RegExp-Unterklassen anzupassen. Sie wird intern in String.prototype.search() aufgerufen. Zum Beispiel geben die folgenden zwei Beispiele das gleiche Ergebnis zurück.

js
"abc".search(/a/);

/a/[Symbol.search]("abc");

[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. Das g-Flag hat bei dieser Methode keine Wirkung.

Diese Methode kopiert den regulären Ausdruck nicht, im Gegensatz zu [Symbol.split]() oder [Symbol.matchAll](). Im Unterschied zu [Symbol.match]() oder [Symbol.replace]() wird jedoch immer lastIndex auf 0 gesetzt, wenn die Ausführung beginnt, und beim Beenden auf den vorherigen Wert zurückgesetzt, um im Allgemeinen Nebenwirkungen zu vermeiden. Das bedeutet, dass immer der erste Treffer im String zurückgegeben wird, auch wenn lastIndex ungleich null ist, und Sticky-Regexe 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' ]

Beispiele

Direkter Aufruf

Diese Methode kann auf fast die gleiche Weise wie String.prototype.search() verwendet werden, mit Ausnahme des unterschiedlichen Werts von this und der unterschiedlichen 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 ä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

Spezifikation
ECMAScript® 2027 Language Specification
# sec-regexp.prototype-%symbol.search%

Browser-Kompatibilität

Siehe auch