RegExp.prototype[@@matchAll]()
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 [@@matchAll]
renvoie l'ensemble des correspondances d'une expression rationnelle sur une chaîne de caractères.
Exemple interactif
Syntaxe
regexp[Symbol.matchAll](str);
Paramètres
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.
"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.
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).
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-%symbol.matchall% |
Compatibilité des navigateurs
BCD tables only load in the browser