Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
String.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éthodematchAll() 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).
Dans cet article
Exemple interactif
const regexp = /t(e)(st(\d?))/g;const str = "test1test2";const array = [...str.matchAll(regexp)];console.log(array[0]);// Expected output: Array ["test1", "e", "st1", "1"]console.log(array[1]);// Expected output: Array ["test2", "e", "st2", "2"]Syntaxe
str.matchAll(regexp);Paramètres
Valeur de retour
Unitérateur.
Exemples
>Regexp.exec() etmatchAll()
Avant l'apparition dematchAll() en JavaScript, il était possible d'utiliserRegExp.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."}AvecmatchAll(), on peut éviter la bouclewhile et le marqueur global. On récupère l'itérateur et on utilise une bouclefor...of,la décomposition de tableau ou encoreArray.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érateurmatches = str.matchAll(regexp);Array.from(matches, (m) => m[0]);// Array [ "foo", "foo" ]Meilleur accès aux groupes capturants
Un autre avantage dematchAll() est un meilleur accès aux groupes capturants. De fait, les groupes capturants sont ignorés parmatch() lorsqu'on utilise le marqueur global/g :
var regexp = /t(e)(st(\d?))/g;var str = "test1test2";str.match(regexp);// Array ['test1', 'test2']AvecmatchAll(), 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
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-string.prototype.matchall> |