RegExp.prototype[@@match]()
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 [@@match]()
permet de récupérer les correspondances obtenues lorsqu'on teste une chaîne de caractères par rapport à une expression rationnelle (regexp).
Exemple interactif
class RegExp1 extends RegExp { [Symbol.match](str) { const result = RegExp.prototype[Symbol.match].call(this, str); if (result) { return "VALID"; } return "INVALID"; } } console.log("2012-07-02".match(new RegExp1("([0-9]+)-([0-9]+)-([0-9]+)"))); // Expected output: "VALID"
Syntaxe
regexp[Symbol.match](str);
Paramètres
Valeur de retour
Description
Cette méthode est appelée de façon interne lorsqu'on utilise String.prototype.match()
. Ainsi, les deux exemples qui suivent sont équivalents et le second est la version interne du premier :
"abc".match(/a/); /a/[Symbol.match]("abc");
Cette méthode existe afin de permettre d'adapter le comportement de la recherche des correspondances pour les sous-classes de RegExp
.
Exemples
Appel direct
Cette méthode peut être utilisée comme String.prototype.match()
mais avec un objet this
différent et un ordre des paramètres également différent.
var re = /[0-9]+/g; var str = "2016-01-02"; var résultat = re[Symbol.match](str); console.log(résultat); // ["2016", "01", "02"]
Utilisation de @@match
avec une sous-classe
Les sous-classes de RegExp
peuvent surcharger la méthode [@@match]()
afin de modifier le comportement.
class MaRegExp extends RegExp { [Symbol.match](str) { var résultat = RegExp.prototype[Symbol.match].call(this, str); if (!résultat) return null; return { group(n) { return résultat[n]; }, }; } } var re = new MaRegExp("([0-9]+)-([0-9]+)-([0-9]+)"); var str = "2016-01-02"; var résultat = str.match(re); // String.prototype.match appelle re[@@match]. console.log(résultat.group(1)); // 2016 console.log(résultat.group(2)); // 01 console.log(résultat.group(3)); // 02
Spécifications
Specification |
---|
ECMAScript® 2026 Language Specification # sec-regexp.prototype-%symbol.match% |