String.replace() en JavaScript : remplacer du texte une fois ou partout

replace ne remplace que la première occurrence quand on lui passe du texte. replaceAll et le drapeau g couvrent le reste, avec des pièges.
3 min de lecture
Believemy logo

Corriger un mot dans un titre, masquer un numéro, transformer une date au format américain en date française : le remplacement de texte est un geste quotidien, et il réserve une surprise à la première utilisation.

replace ne remplace qu'une seule occurrence, la première. Le comportement est documenté, il n'en reste pas moins la cause d'un bon nombre de corrections qui ne s'appliquent qu'à moitié.


Définition

replace(cherche, remplace) rend une nouvelle String (chaîne de caractères) dans laquelle la première occurrence trouvée a été remplacée. La chaîne d'origine n'est jamais modifiée, il faut donc récupérer le retour.

JAVASCRIPT
const phrase = "a-a-a";

console.log(phrase.replace("a", "z"));     // "z-a-a"
console.log(phrase.replaceAll("a", "z"));  // "z-z-z"
console.log(phrase.replace(/a/g, "z"));    // "z-z-z"
console.log(phrase);                       // "a-a-a", intact

Trois écritures, deux résultats. replaceAll est la forme lisible, l'expression régulière avec le drapeau g la forme historique, encore présente dans beaucoup de code.


Les groupes de capture

Avec une RegExp, les portions entre parenthèses sont mémorisées et se réutilisent dans le texte de remplacement sous les noms $1, $2, et ainsi de suite.

JAVASCRIPT
const date = "2026-08-20";

console.log(date.replace(/(\d{4})-(\d{2})-(\d{2})/, "$3/$2/$1"));  // "20/08/2026"

console.log("abc".replace("b", "[$&]"));  // "a[b]c", $& reprend ce qui a été trouvé
Bon à savoir

Le signe dollar a un sens spécial dans le texte de remplacement. Une valeur venue d'un utilisateur et contenant $& produit donc un résultat inattendu, et $$ insère un dollar unique. Quand le remplacement n'est pas une constante écrite par vous, passez par la forme fonction ci-dessous.


La fonction de remplacement

Le second argument peut être une fonction. Elle reçoit le texte trouvé, puis les groupes capturés, et ce qu'elle rend est inséré tel quel.

JAVASCRIPT
console.log("prix 49 et 19".replace(/\d+/g, (m) => Number(m) * 2));
// "prix 98 et 38"

const modeles = { prenom: "Alice", ville: "Lyon" };
console.log("Bonjour {prenom} de {ville}".replace(/{(\w+)}/g, (_, cle) => modeles[cle]));
// "Bonjour Alice de Lyon"

Le second exemple tient en une ligne un mini-moteur de gabarit, utile pour des messages courts dont le texte est stocké ailleurs, dans un fichier de traduction par exemple.


Questions fréquentes

Question

replace ou replaceAll ?

replaceAll dès que toutes les occurrences doivent changer, ce qui est le cas le plus fréquent. replace reste utile quand une seule doit l'être, par exemple pour remplacer la première virgule d'une ligne. Notez que replaceAll lève une TypeError si on lui passe une expression régulière sans le drapeau g, ce qui est une protection bienvenue.


Question

Comment remplacer sans tenir compte de la casse ?

Avec une expression régulière portant les drapeaux i et g : texte.replace(/javascript/gi, "JavaScript"). La forme texte de replace et replaceAll compare toujours à l'exact, majuscules comprises, sans option pour l'assouplir.


Question

Comment échapper une valeur avant de l'utiliser comme motif ?

Un texte saisi par un visiteur peut contenir ., * ou (, qui ont un sens dans une expression régulière. Il faut donc les préfixer d'un antislash avant de construire le motif, ou éviter la RegExp et rester sur replaceAll, qui compare du texte brut. Ce genre de détail, et les vraies mécaniques des expressions régulières, sont travaillés dans la formation JavaScript.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.