RegExp.prototype[@@matchAll]()

La méthode [@@matchAll] renvoie l'ensemble des correspondances d'une expression rationnelle sur une chaîne de caractères.

Syntaxe

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.

'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

Spécification État Commentaires
ECMAScript Latest Draft (ECMA-262)
La définition de 'RegExp.prototype[@@matchAll]' dans cette spécification.
Projet  

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung InternetNode.js
@@matchAllChrome Support complet 73Edge Aucun support NonFirefox Support complet 67IE Aucun support NonOpera Support complet 60Safari Aucun support NonWebView Android Support complet 73Chrome Android Support complet 73Firefox Android Support complet 67Opera Android Support complet OuiSafari iOS Aucun support NonSamsung Internet Android Support complet Ouinodejs Support complet 12.0.0

Légende

Support complet  
Support complet
Aucun support  
Aucun support

Voir aussi