String. prototype. matchAll()
Renvoie un itérateur sur toutes les correspondances d’une expression régulière, chacune avec ses groupes et sa position dans le texte.
- Renvoie
- Un itérateur de tableaux de correspondances. Quand rien ne correspond, l’itérateur est vide.
- Modifie l’original
- Non
Exemple
#const report = 'HTML: 120 pts, CSS: 95 pts, JS: 140 pts'
for (const match of report.matchAll(/(\w+): (\d+) pts/g)) {
console.log(match[1], Number(match[2]), match.index)
}Définition et utilisation
#La méthode matchAll() trouve toutes les correspondances d’une expression régulière dans une chaîne et les renvoie sous forme d’itérateur. Chaque élément est un tableau comme celui de match() sans le flag g : l’indice 0 contient tout le texte correspondant, les indices suivants les groupes capturés, et les propriétés index et groups la position et les groupes nommés.
Elle résout un problème que match() ne sait pas traiter. Avec le flag g, vous obtenez toutes les correspondances, mais sans les groupes, et sans le flag, les groupes de la première correspondance seulement. matchAll() donne les deux à la fois.
L’expression doit avoir le flag g, sinon la méthode lève une TypeError. Le résultat est un itérateur, pas un tableau : vous le parcourez avec for...of, et vous le transformez en tableau avec [...text.matchAll(re)] ou Array.from(). Un itérateur ne peut être parcouru qu’une seule fois.
Syntaxe
#string.matchAll(regexp)Paramètres
#regexp
RegExp | string
Expression régulière avec le flagg. Une simple chaîne est convertie en expression avec le flagg.
Plus d’exemples
#const text = 'Dates : 2026-10-05, 2026-11-20'
const dates = [...text.matchAll(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g)]
console.log(dates.length)
console.log(dates.map((match) => `${match.groups.day}.${match.groups.month}`))const text = 'Exercice 3 pour 15 pts, exercice 7 pour 40 pts'
const re = /exercice (\d+)/gi
console.log(text.match(re))
console.log([...text.matchAll(re)].map((match) => match[1]))match() avec le flag g ne renvoie que les correspondances entières. Seule matchAll() extrait les numéros d’exercice du groupe (\d+).
try {
'a1b2'.matchAll(/\d/)
} catch (error) {
console.log(error.name)
}
console.log([...'a1b2'.matchAll(/\d/g)].length)Compatibilité des navigateurs
#Largement disponible
Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.
- Chrome
- Edge
- Firefox
- Safari
Bonnes pratiques
#- Un itérateur issu de
matchAll()ne peut être parcouru qu’une seule fois. Si vous avez besoin des résultats plusieurs fois, convertissez-le aussitôt en tableau :[...text.matchAll(re)]. - Les groupes nommés
(?<nom>...)se lisent plus facilement que des références commematch[1]etmatch[2], surtout quand il y a plusieurs groupes. - Si vous n’avez besoin que des fragments correspondants, sans les groupes ni les positions, le plus simple
text.match(/.../g)suffit.
Entrées associées
#- String.prototype.match()Fait correspondre une chaîne à une expression régulière. Renvoie un tableau avec la correspondance, toutes les correspondances, ou null.
- RegExpUne expression régulière : un modèle pour rechercher, valider et remplacer des fragments de texte.
- String.prototype.replaceAll()Renvoie une nouvelle chaîne dans laquelle toutes les occurrences d’un motif ont été remplacées par le texte donné ou le résultat d’une fonction.
- for...ofParcourt les valeurs successives d’un objet itérable : tableau, chaîne, Map, Set et autres.
- Itérateurs (Symbol.iterator)Le protocole d’itération : un objet avec une méthode [Symbol.iterator]() fonctionne avec for...of, le spread et la déstructuration.
Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.