RegExp.prototype[@@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.

La méthode [@@search]() recherche une correspondance entre une expression rationnelle décrite par this et une chaîne de caractères donnée.

Exemple interactif

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

Syntaxe

js
regexp[Symbol.search](str);

Paramètres

str

Une chaîne de caractères (String) sur laquelle on veut rechercher une correspondance.

Valeur de retour

entier

Si la recherche réussit, [@@search]() renvoie la position de la première correspondance de l'expression rationnelle au sein de la chaîne, sinon elle renvoie -1.

Description

Cette méthode est appelée en interne lors de l'utilisation de String.prototype.search(). Ainsi, les deux exemples qui suivent sont équivalents et le second est la version interne du premier :

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

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

Cette méthode existe afin de pouvoir adapter le comportement de la recherche pour les sous-classes de RegExp.

Exemples

Appel direct

Cette méthode peut être utilisée comme String.prototype.search(), elle utilise simplement un objet this différent et un ordre de paramètres différent :

js
var re = /-/g;
var str = "2016-01-02";
var résultat = re[Symbol.search](str);
console.log(résultat); // 4

Utiliser @@search avec une sous-classe

Les sous-classes de RegExp peuvent surcharger [@@search]() afin de modifier le comportement obtenu :

js
class MaRegExp extends RegExp {
  constructor(str) {
    super(str);
    this.pattern = str;
  }
  [Symbol.search](str) {
    return str.indexOf(this.pattern);
  }
}

var re = new MaRegExp("a+b");
var str = "ab a+b";
var résultat = str.search(re); // String.prototype.search appelle re[@@search].
console.log(résultat); // 3

Spécifications

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

Compatibilité des navigateurs

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

Voir aussi