RegExp.prototype[@@search]() - JavaScript | MDN
Baseline
Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2016.
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
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® 2026 Language Specification # sec-regexp.prototype-%symbol.search% |