« Remplacer tout » en JavaScript : des anciennes béquilles à la norme moderne
\n\nImaginez la situation : vous écrivez un chatbot, et un utilisateur a envoyé un message avec une faute de frappe « bonjOur ». Vous devez remplacer toutes les occurrences de « O » par « o ». Ou vous analysez un fichier CSV et souhaitez supprimer tous les espaces superflus. Cela semble simple ? En JavaScript, jusqu'à récemment, c'était un véritable casse-tête.
\n\nLa question « How do I replace all occurrences of a string? » est l'une des plus populaires sur Stack Overflow. Des milliers de développeurs butaient sur cette tâche apparemment élémentaire. Pourquoi ? Parce que le bon vieux replace() ne remplace par défaut que la première correspondance. L'astuce ? Utiliser une expression régulière avec le drapeau g. Mais en 2025, nous avons une solution bien plus élégante.
Dans cet article, nous analyserons toutes les méthodes actuelles pour remplacer toutes les occurrences d'une sous-chaîne en JavaScript : des classiques aux normes modernes. Vous découvrirez quelle méthode choisir pour différentes tâches et pourquoi replaceAll est votre nouveau meilleur ami.
Pourquoi l'ancien replace() ne fonctionne-t-il pas « prêt à l'emploi » ?
\n\nCommençons par la déception que chaque débutant a rencontrée :
\n\nlet text = "J'aime JavaScript, JavaScript c'est génial !";\nlet newText = text.replace("JavaScript", "Python");\nconsole.log(newText); \n// Résultat : "J'aime Python, JavaScript c'est génial !"\n\n\nVous voyez ? Seule la première occurrence a été remplacée. La méthode String.prototype.replace() a été conçue ainsi historiquement. Si vous lui passez une chaîne (et non une expression régulière), elle cherche et remplace la première correspondance. Pour de nombreux langages (Python, Java), cela a été un choc. Mais JavaScript a longtemps vécu avec cette limitation.
D'ailleurs, si vous cherchez la réponse à la question « how do I replace all occurrences of a string in JavaScript », sachez qu'avant 2021, la seule méthode fiable était d'utiliser RegExp.
\n\nMéthode n°1 : La classique — replace() + RegExp (toujours d'actualité)
\n\nC'est la méthode « grand-père » qui fonctionne dans tous les navigateurs, y compris Internet Explorer (oui, il vit encore quelque part). Le secret : le drapeau g (global).
let text = "Le chat a mangé la souris. Le chat est content.";\nlet newText = text.replace(/chat/g, "chien");\nconsole.log(newText); \n// "Le chien a mangé la souris. Le chien est content."\n\n\nAvantages :
\n- \n
- Fonctionne partout (IE11, anciennes versions de Node.js) \n
- Puissant : possibilité d'utiliser des groupes de capture, le drapeau
i(insensibilité à la casse) \n - Très rapide \n
Inconvénients :
\n- \n
- Nécessité d'échapper les caractères spéciaux (point, astérisque, etc.) \n
- Code moins lisible pour les débutants \n
- Ne convient pas si la chaîne à remplacer est dynamique (fournie par l'utilisateur) \n
Si vous devez remplacer une chaîne dynamique, utilisez le constructeur RegExp :
function escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nlet userInput = "bonjour.monde";\nlet text = "bonjour.monde, comment ça va ? bonjour.monde !";\nlet safePattern = escapeRegExp(userInput);\nlet result = text.replace(new RegExp(safePattern, 'g'), 'au revoir.tout');\nconsole.log(result);\n// "au revoir.tout, comment ça va ? au revoir.tout !"\n\n\nLa fonction escapeRegExp est un rituel obligatoire si vous travaillez avec une saisie utilisateur. Sinon, le point dans la chaîne sera interprété comme « n'importe quel caractère ».
Méthode n°2 : La norme moderne — replaceAll() (ES2021+)
\n\nDepuis ES2021 (ECMAScript 2021), nous avons String.prototype.replaceAll(). C'est la réponse à la question « how do I replace all occurrences of a string in JavaScript » qui était attendue depuis des années.
let text = "J'aime JavaScript, JavaScript c'est génial !";\nlet newText = text.replaceAll("JavaScript", "Python");\nconsole.log(newText); \