RegExp.prototype[@@matchAll]()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

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

Exemple interactif

class MyRegExp extends RegExp {
  [Symbol.matchAll](str) {
    const result = RegExp.prototype[Symbol.matchAll].call(this, str);
    if (!result) {
      return null;
    }
    return Array.from(result);
  }
}

const re = new MyRegExp("-[0-9]+", "g");
console.log("2016-01-02|2019-03-07".matchAll(re));
// Expected output: Array [Array ["-01"], Array ["-02"], Array ["-03"], Array ["-07"]]

Syntaxe

js
regexp[Symbol.matchAll](str);

Paramètres

str

Une chaîne de caractères (String) dont on souhaite trouver les correspondances.

Valeur de retour

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.

js
"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.

js
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).

js
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

Specification
ECMAScript® 2025 Language Specification
# sec-regexp-prototype-%symbol.matchall%

Compatibilité des navigateurs

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
[Symbol.matchAll]

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Voir aussi