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
Sur cette page

Exemple

#
JavaScript
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)
}
Console
HTML 120 0
CSS 95 15
JS 140 28

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

#
Syntaxe
string.matchAll(regexp)

Paramètres

#
  • regexp

    RegExp | string

    Expression régulière avec le flag g. Une simple chaîne est convertie en expression avec le flag g.

Plus d’exemples

#
Groupes nommés et tableau de résultats
JavaScript
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}`))
Console
2
['05.10', '20.11']
Comparaison avec match()
JavaScript
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]))
Console
['Exercice 3', 'exercice 7']
['3', '7']

match() avec le flag g ne renvoie que les correspondances entières. Seule matchAll() extrait les numéros d’exercice du groupe (\d+).

Piège : flag g manquant
JavaScript
try {
  'a1b2'.matchAll(/\d/)
} catch (error) {
  console.log(error.name)
}

console.log([...'a1b2'.matchAll(/\d/g)].length)
Console
TypeError
2

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 comme match[1] et match[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

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.