RegExp.prototype[@@matchAll]()
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 janvier 2020.
La méthode [@@matchAll] renvoie l'ensemble des correspondances d'une expression rationnelle sur une chaîne de caractères.
Exemple interactif
class MyRegExp extends RegExp {
[Symbol.matchAll](str) {
const result = RegExp.prototype[Symbol.matchAll].call(this, str);
if (!result) {
return null;
}
return Array.from(result);
}
}
const re = new MyRegExp("-[0-9]+", "g");
console.log("2016-01-02|2019-03-07".matchAll(re));
// Expected output: Array [Array ["-01"], Array ["-02"], Array ["-03"], Array ["-07"]]
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® 2026 Language Specification> # sec-regexp-prototype-%symbol.matchall%> |
Compatibilité des navigateurs
Chargement…