RegExp.prototype[@@matchAll]()
La méthode [@@matchAll] renvoie l'ensemble des correspondances d'une expression rationnelle sur une chaîne de caractères.
Exemple interactif
Syntaxe
js
regexp[Symbol.matchAll](str)
Paramètres
str-
Une chaîne de caractères (
String) dont on souhaite trouver les correspondances.
Valeur de retour
Un itérateur.
Description
Cette méthode est appelée, en interne, par le moteur JavaScript, pendant l'exécution String.prototype.matchAll(). Les deux lignes qui suivent renverront donc le même résultat.
js
'abc'.matchAll(/a/);
/a/[Symbol.matchAll]('abc');
Cette méthode existe afin de personnaliser le comportement des correspondances pour les sous-classes de RegExp.
Exemples
Appel direct
Cette méthode peut être utilisée de façon semblable à String.prototype.matchAll() mais l'objet this et l'ordre des arguments seront différents.
js
var re = /[0-9]+/g;
var str = '2016-01-02';
var resultat = re[Symbol.matchAll](str);
console.log(Array.from(resultat, x => x[0]));
// ["2016", "01", "02"]
Utiliser @@matchAll dans une sous-classe
Les sous-classes de RegExp peuvent surcharger la méthode [@@matchAll]() afin de modifier le comportement par défaut (par exemple pour renvoyer un tableau (Array) plutôt qu'un itérateur).
js
class MaRegExp extends RegExp {
[Symbol.matchAll](str) {
var resultat = RegExp.prototype[Symbol.matchAll].call(this, str);
if (!resultat) {
return null;
} else {
return Array.from(resultat);
}
}
}
var re = new MaRegExp('([0-9]+)-([0-9]+)-([0-9]+)', 'g');
var str = '2016-01-02|2019-03-07';
var resultat = str.matchAll(re);
console.log(resultat[0]); // [ "2016-01-02", "2016", "01", "02" ]
console.log(resultat[1]); // [ "2019-03-07", "2019", "03", "07" ]
Spécifications
| Specification |
|---|
| ECMAScript Language Specification # sec-regexp-prototype-matchall |
Compatibilité des navigateurs
BCD tables only load in the browser