Help us test MDN's new front-end: https://discourse.mozilla.org/t/help-us-test-mdns-new-react-front-end-beta/42593

La méthode matchAll() renvoie un itérateur contenant l'ensemble des correspondances entre une chaîne de caractères d'une part et une expression rationnelle d'autre part (y compris les groupes capturants).

{{EmbedInteractiveExample("pages/js/string-matchall.html")}}

Syntaxe

str.matchAll(regexp)

Paramètres

regexp
Un objet représentant une expression rationnelle. Si cet objet n'est pas une instance de RegExp, il est automatiquement et implicitement converti en une telle instance à l'aide de new RegExp(obj).

Valeur de retour

Un itérateur.

Exemples

Regexp.exec() et matchAll()

Avant l'apparition de matchAll() en JavaScript, il était possible d'utiliser RegExp.exec (et des expressions rationnelles utilisant le marqueur /g) dans une boucle afin d'obtenir l'ensemble des correspondances :

const regexp = RegExp('foo*','g');
const str = 'table football, foosball';

while ((matches = regexp.exec(str)) !== null) {
  console.log(`${matches[0]} trouvé. Prochaine recherche à partir de ${regexp.lastIndex}.`);
  // dans la console : "foo trouvé. Prochaine recherche à partir de 9."
  // dans la console : "foo trouvé. Prochaine recherche à partir de 19."
}

Avec matchAll(), on peut éviter la boucle while et le marqueur global. On récupère l'itérateur et on utilise une boucle for...of, la décomposition de tableau ou encore Array.from() :

const regexp = RegExp('foo*','g'); 
const str = 'table football, foosball';
let matches = str.matchAll(regexp);

for (const match of matches) {
  console.log(match);
}
// Array [ "foo" ]
// Array [ "foo" ]

// l'itérateur est épuise après l'itération via for..of
// On rappelle matchAll afin de créer un nouvel itérateur
matches = str.matchAll(regexp);

Array.from(matches, m => m[0]);
// Array [ "foo", "foo" ]

Meilleur accès aux groupes capturants

Un autre avantage de matchAll() est un meilleur accès aux groupes capturants. De fait, les groupes capturants sont ignorés par match() lorsqu'on utilise le marqueur global /g :

var regexp = /t(e)(st(\d?))/g;
var str = 'test1test2';

str.match(regexp); 
// Array ['test1', 'test2']

Avec matchAll(), on peut y accéder :

let array = [...str.matchAll(regexp)];

array[0];
// ['test1', 'e', 'st1', '1', index: 0, input: 'test1test2', length: 4]
array[1];
// ['test2', 'e', 'st2', '2', index: 5, input: 'test1test2', length: 4]

Spécifications

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

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox 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 73Edge Mobile Aucun support NonFirefox Android Support complet 67Opera Android Support complet OuiSafari iOS Aucun support NonSamsung Internet Android Support complet Ouinodejs Aucun support Non

Légende

Support complet  
Support complet
Aucun support  
Aucun support

Voir aussi

Étiquettes et contributeurs liés au document

Contributeurs à cette page : SphinxKnight, nkokla, mdnwebdocs-bot
Dernière mise à jour par : SphinxKnight,