--- title: RegExp.prototype[@@replace]() slug: Web/JavaScript/Reference/Global_Objects/RegExp/@@replace tags: - JavaScript - Méthode - Prototype - Reference - RegExp translation_of: Web/JavaScript/Reference/Global_Objects/RegExp/@@replace original_slug: Web/JavaScript/Reference/Objets_globaux/RegExp/@@replace ---
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.
Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner https://github.com/mdn/interactive-examples et à envoyer une pull request !
regexp[Symbol.replace](str, newSubStr|function)
str
newSubStr (replacement)
function (replacement)
Une nouvelle chaîne de caractères pour laquelle les correspondances (toutes ou une partie) ont été remplacées.
Cette méthode est appelée de façon interne par la méthode {{jsxref("String.prototype.replace()")}} lorsque l'arugment pattern
argument est un objet {{jsxref("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 {{jsxref("RegExp")}}, {{jsxref("String.prototype.replace()")}} n'appellera pas cette méthode et ne créera pas d'objet {{jsxref("RegExp")}}.
Cette méthode peut être utilisée comme {{jsxref("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
@@replace
dans une sous-classeLes sous-classes de {{jsxref("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écification | État | Commentaires |
---|---|---|
{{SpecName('ES6', '#sec-regexp.prototype-@@replace', 'RegExp.prototype[@@replace]')}} | {{Spec2('ES6')}} | Définition initiale. |
{{SpecName('ESDraft', '#sec-regexp.prototype-@@replace', 'RegExp.prototype[@@replace]')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.builtins.RegExp.@@replace")}}