Como substituir todas as ocorrências de uma string em JavaScript: 4 melhores maneiras em 2025

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

«Substituir tudo» em JavaScript: de gambiarras antigas ao padrão moderno



Imagine a situação: você está escrevendo um chatbot, e o usuário enviou uma mensagem com um erro de digitação «oláá». Precisa substituir todas as ocorrências de «á» por «a». Ou você está analisando um arquivo CSV e quer remover todos os espaços extras. Parece simples? Em JavaScript, até recentemente, isso era uma verdadeira dor de cabeça.



A pergunta «How do I replace all occurrences of a string?» é uma das mais populares no Stack Overflow. Milhares de desenvolvedores tropeçavam nessa tarefa aparentemente elementar. Por quê? Porque o bom e velho replace() por padrão substitui apenas a primeira correspondência. O truque? Usar uma expressão regular com a flag g. Mas em 2025, temos uma solução muito mais elegante.



Neste artigo, vamos analisar todas as formas atuais de substituir todas as ocorrências de uma substring em JavaScript: desde os clássicos até os padrões modernos. Você descobrirá qual método escolher para diferentes tarefas e por que replaceAll é seu novo melhor amigo.



Por que o antigo replace() não funciona «de fábrica»?



Vamos começar pela decepção que todo iniciante já enfrentou:



let text = "Eu amo JavaScript, JavaScript é demais!";let newText = text.replace("JavaScript", "Python");console.log(newText); // Saída: "Eu amo Python, JavaScript é demais!"


Viu? Substituiu apenas a primeira ocorrência. O método String.prototype.replace() foi projetado assim historicamente. Se você passar uma string (e não uma expressão regular), ele procura e substitui a primeira correspondência. Para muitas linguagens (Python, Java), isso foi um choque. Mas JavaScript conviveu com essa limitação por muito tempo.



A propósito, se você está procurando a resposta para a pergunta «how do I replace all occurrences of a string in JavaScript», saiba que até 2021 a única maneira confiável era usar RegExp.



Método nº1: Clássico — replace() + RegExp (ainda relevante)



Este é o método «do vovô», que funciona em todos os navegadores, incluindo Internet Explorer (sim, ele ainda existe em algum lugar). O segredo é a flag g (global).



let text = "O gato comeu o rato. O gato está feliz.";let newText = text.replace(/gato/g, "cachorro");console.log(newText); // "O cachorro comeu o rato. O cachorro está feliz."


Vantagens:

  • Funciona em todos os lugares (IE11, versões antigas do Node.js)
  • Poderoso: permite usar grupos de captura, flags i (case-insensitive)
  • Muito rápido


Desvantagens:

  • Requer escapar caracteres especiais (ponto, asterisco, etc.)
  • Código menos legível para iniciantes
  • Não é adequado se a string de substituição for dinâmica (vinda do usuário)


Se você precisa substituir uma string dinâmica, use o construtor RegExp:



function escapeRegExp(string) {  return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');}

let userInput = "olá.mundo";let text = "olá.mundo, como vai? olá.mundo!";let safePattern = escapeRegExp(userInput);let result = text.replace(new RegExp(safePattern, 'g'), 'tchau.tudo');console.log(result);// "tchau.tudo, como vai? tchau.tudo!"


A função escapeRegExp é um ritual obrigatório se você trabalha com entrada do usuário. Caso contrário, o ponto na string será interpretado como «qualquer caractere».



Método nº2: Padrão moderno — replaceAll() (ES2021+)



A partir do ES2021 (ECMAScript 2021), temos o String.prototype.replaceAll(). Esta é a resposta para a pergunta «how do I replace all occurrences of a string in JavaScript», que era esperada há anos.



let text = "Eu amo JavaScript, JavaScript é demais!";let newText = text.replaceAll("JavaScript", "Python");console.log(newText); \                

Blogs

Book Recommendations