La méthode [@@replace]()
remplace toutes ou certaines correspondances d'un motif this
dans une chaîne de caractère avec un outil de remplacement. La valeur renvoyée est la nouvelle chaîne ainsi créée. Cet outil de remplacement peut être une chaîne de caractère ou une fonction appelée pour chacune des correspondances.
Syntaxe
regexp[Symbol.replace](str, newSubStr|function)
Paramètres
str
- Une chaîne de caractères (
String
) pour laquelle on souhaite effectuer des remplacement. newSubStr (replacement)
- La chaîne de caractères qui remplace les correspondances trouvées. On peut effectuer le remplacement sur un nombre donné de correspondances (cf. la section Utiliser une chaîne de caractères comme paramètre de la page
String.prototype.replace()
). function (replacement)
- Une fonction qui est appelée pour créer la sous-chaîne de remplacement. Les arguments fournis à cette fonction sont décrits dans la section Utiliser une chaîne de caractères comme paramètre de la page
String.prototype.replace()
.
Valeur de retour
Une nouvelle chaîne de caractères pour laquelle les correspondances (toutes ou une partie) ont été remplacées.
Description
Cette méthode est appelée de façon interne par la méthode String.prototype.replace()
lorsque l'arugment pattern
argument est un objet RegExp
. Les deux lignes de code qui suivent sont équivalentes et la seconde est la version interne de la première :
'abc'.replace(/a/, 'A'); /a/[Symbol.replace]('abc', 'A');
Cette méthode existe afin de pouvoir personnaliser le comportement du remplacement pour les classes filles de RegExp
.
Si l'argument décrivant le motif n'est pas un objet RegExp
, String.prototype.replace()
n'appellera pas cette méthode et ne créera pas d'objet RegExp
.
Exemples
Appel direct
Cette méthode peut être utilisée comme String.prototype.replace()
, aux différences près que l'objet this
est différent et que l'ordre des arguments change :
var re = /-/g; var str = '2016-01-01'; var newstr = re[Symbol.replace](str, '.'); console.log(newstr); // 2016.01.01
Utiliser @@replace
dans une sous-classe
Les sous-classes de RegExp
peuvent surcharger la méthode [@@replace]()
pour modifier le comportement.
class MaRegExp extends RegExp { constructor(pattern, flags, count) { super(pattern, flags); this.count = count; } [Symbol.replace](str, replacement) { // Applique @@replace |count| fois. var result = str; for (var i = 0; i < this.count; i++) { result = RegExp.prototype[Symbol.replace].call(this, result, replacement); } return result; } } var re = new MaRegExp('\\d', '', 3); var str = '01234567'; var newstr = str.replace(re, '#'); // String.prototype.replace appelle re[@@replace]. console.log(newstr); // ###34567
Spécifications
Spécification | État | Commentaires |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) La définition de 'RegExp.prototype[@@replace]' dans cette spécification. |
Standard | Définition initiale. |
ECMAScript 2017 Draft (ECMA-262) La définition de 'RegExp.prototype[@@replace]' dans cette spécification. |
Projet |
Compatibilité des navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Support simple | ? | 49 (49) | ? | ? | ? |
Fonctionnalité | Android | Chrome pour Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support simple | ? | ? | 49.0 (49) | ? | ? | ? |