RegExp : méthode [Symbol.search]()
Baseline
Large disponibilité
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 [Symbol.search]() des instances de RegExp définit comment String.prototype.search() doit se comporter.
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")));
// Résultat attendu : 6
Syntaxe
regexp[Symbol.search](str)
Paramètres
Valeur de retour
L'index de la première correspondance entre l'expression rationnelle et la chaîne de caractères donnée, ou -1 si aucune correspondance n'a été trouvée.
Description
Cette méthode existe pour personnaliser le comportement de la recherche dans les sous-classes de RegExp. Elle est appelée en interne dans String.prototype.search(). Par exemple, les deux exemples suivants retournent le même résultat.
"abc".search(/a/);
/a/[Symbol.search]("abc");
[Symbol.search]() appelle toujours exactement une fois la méthode exec() de l'expression rationnelle, et retourne la propriété index du résultat, ou -1 si le résultat est null. L'indicateur g n'a aucun effet avec cette méthode.
Cette méthode ne copie pas l'expression rationnelle, contrairement à [Symbol.split]() ou [Symbol.matchAll](). Cependant, contrairement à [Symbol.match]() ou [Symbol.replace](), elle définit toujours lastIndex à 0 au début de l'exécution et le restaure à la valeur précédente à la fin, évitant ainsi généralement les effets secondaires. Cela signifie qu'elle retourne toujours la première correspondance dans la chaîne de caractères même lorsque lastIndex est non nul, et que les expressions rationnelles adhérentes recherchent toujours strictement au début de la chaîne de caractères.
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' ]
Exemples
>Appel direct
Cette méthode peut être utilisée de manière presque identique à String.prototype.search(), à l'exception du this différent et de l'ordre des arguments différent.
const re = /-/g;
const chaine = "2016-01-02";
const resultat = re[Symbol.search](chaine);
console.log(resultat); // 4
Utiliser [Symbol.search]() dans les sous-classes
Les sous-classes de RegExp peuvent redéfinir la méthode [Symbol.search]() pour modifier le comportement.
class MaRegExp extends RegExp {
constructor(chaine) {
super(chaine);
this.pattern = chaine;
}
[Symbol.search](chaine) {
return chaine.indexOf(this.pattern);
}
}
const re = new MaRegExp("a+b");
const chaine = "ab a+b";
const resultat = chaine.search(re); // String.prototype.search appelle re[Symbol.search]().
console.log(resultat); // 3
Spécifications
| Spécification |
|---|
| ECMAScript® 2027 Language Specification> # sec-regexp.prototype-%symbol.search%> |
Compatibilité des navigateurs
Voir aussi
- La prothèse d'émulation de
RegExp.prototype[Symbol.search]danscore-js(angl.) - La méthode
String.prototype.search() - La méthode
RegExp.prototype[Symbol.match]() - La méthode
RegExp.prototype[Symbol.matchAll]() - La méthode
RegExp.prototype[Symbol.replace]() - La méthode
RegExp.prototype[Symbol.split]() - La méthode
RegExp.prototype.exec() - La méthode
RegExp.prototype.test() - La méthode statique
Symbol.search()