JavaScript Replace: Como Substituir Textos
Dominar javascript replace é essencial para quem manipula textos em aplicações web, APIs, formulários e rotinas de processamento de dados. O método String.replace() permite localizar uma parte de uma string e trocá-la por outro valor, seja uma palavra simples, seja um padrão complexo descrito por expressão regular. Embora pareça uma operação básica, há detalhes relevantes: por padrão, apenas a primeira ocorrência é alterada, as strings são imutáveis e caracteres especiais podem mudar completamente o resultado. Neste guia, você entenderá como usar replace, quando preferir replaceAll JavaScript e como criar substituições confiáveis, legíveis e adequadas a diferentes cenários.
Como funciona o JavaScript replace na prática
O método replace() pertence ao objeto String. Sua estrutura mais comum é texto.replace(busca, substituicao). O primeiro argumento define o conteúdo a localizar; o segundo informa o que será inserido no lugar. O retorno é sempre uma nova string. Portanto, a variável original não é modificada automaticamente, comportamento coerente com a imutabilidade das strings em JavaScript.
Veja um exemplo simples: const mensagem = 'Olá, visitante'; const novaMensagem = mensagem.replace('visitante', 'Marina');. Nesse caso, novaMensagem terá o valor Olá, Marina, enquanto mensagem continuará contendo o texto anterior. Para efetivamente atualizar uma variável, é necessário atribuir o resultado: mensagem = mensagem.replace('visitante', 'Marina');, desde que ela tenha sido declarada com let, e não com const.
Quando a busca é uma string comum, o javascript replace troca somente a primeira ocorrência. Por exemplo, 'azul azul azul'.replace('azul', 'verde') gera verde azul azul. Esse detalhe causa muitos erros em funções de normalização de conteúdo, especialmente ao tratar URLs, dados copiados de planilhas e descrições repetitivas. Para todos os casos, deve-se avaliar se replaceAll() ou uma expressão regular global é a escolha mais apropriada.
Também é possível utilizar uma função como segundo argumento. Nesse formato, a função recebe informações sobre o trecho encontrado e retorna o valor que deve substituí-lo. É um recurso poderoso para transformar dados dinamicamente, como formatar números, corrigir padrões ou converter palavras conforme regras de negócio. A especificação detalhada de String pode ser consultada na documentação da MDN Web Docs sobre String.replace().
Diferenças entre replace, replaceAll e expressões regulares
Na programação moderna, é importante escolher o mecanismo de substituição conforme a intenção. String.replace() é flexível porque aceita texto literal e expressões regulares. Já replaceAll JavaScript, introduzido em versões mais recentes da linguagem, foi criado para deixar explícita a intenção de trocar todas as ocorrências de um valor textual.
Com replaceAll(), o exemplo anterior fica direto: 'azul azul azul'.replaceAll('azul', 'verde') retorna verde verde verde. Esse método evita a necessidade de usar a flag global em uma regex quando a busca é literal. Entretanto, deve-se considerar a compatibilidade do ambiente, sobretudo em projetos legados ou navegadores muito antigos. Em ambientes atuais, como navegadores modernos e versões atualizadas do Node.js, seu uso é amplamente seguro.
As expressões regulares, conhecidas como regex, são recomendadas quando é necessário localizar variações de um padrão. Para remover todos os espaços de uma frase, por exemplo, usa-se frase.replace(/\s+/g, ''). A expressão \s+ encontra um ou mais caracteres de espaço, tabulação ou quebra de linha; a flag g solicita uma busca global. Sem essa flag, o replace altera apenas a primeira correspondência, mesmo que a regex identifique um padrão válido.
Outro ponto decisivo é a diferenciação entre maiúsculas e minúsculas. A busca textual e as regex sem flags são sensíveis a caixa. Assim, 'JavaScript javascript'.replace('javascript', 'JS') mantém a primeira palavra intacta. Para ignorar essa diferença, a regex pode usar a flag i: 'JavaScript javascript'.replace(/javascript/gi, 'JS'). As flags g e i significam, respectivamente, global e case-insensitive, sendo uma combinação muito comum em tarefas de substituir texto.
Boas práticas para substituir texto com segurança
- Armazene o retorno: lembre-se de que replace não modifica a string original; atribua o resultado a uma variável quando necessário.
- Escolha busca literal para valores previsíveis: se o texto não exige padrões, uma string simples torna o código mais fácil de revisar.
- Use replaceAll para todas as ocorrências literais: ele comunica claramente a intenção e reduz a complexidade de regex desnecessárias.
- Escape caracteres em regex: pontos, parênteses, colchetes, asteriscos e sinais de interrogação possuem significado especial e precisam ser tratados quando forem literais.
- Valide conteúdos externos: textos inseridos por usuários ou vindos de APIs podem conter formatos inesperados; teste os cenários reais antes de aplicar transformações.
- Evite manipular HTML sem critério: substituir texto em uma string HTML pode quebrar atributos, tags ou estruturas. Para o DOM, prefira APIs específicas quando possível.
- Crie testes automatizados: inclua casos com texto vazio, caracteres acentuados, ocorrências repetidas e entradas sem correspondência.
Uma precaução especial envolve valores dinâmicos usados para construir regex. Se o termo pesquisado vier de um campo de formulário, ele pode conter caracteres como ., + ou *. Em regex, tais caracteres não representam necessariamente eles mesmos. Antes de criar o padrão, é preciso escapá-los adequadamente. Isso evita resultados incorretos e reduz riscos de expressões excessivamente custosas, problema conhecido como ReDoS em cenários específicos.
Comparativo de métodos para substituição de strings
| Método | Alcance padrão | Melhor uso | Exemplo |
|---|---|---|---|
replace('a', 'b') | Primeira ocorrência literal | Troca simples e pontual | 'casa'.replace('a', 'o') |
replaceAll('a', 'b') | Todas as ocorrências literais | Padronização de textos repetidos | 'banana'.replaceAll('a', 'o') |
replace(/a/g, 'b') | Todas as ocorrências por regex | Padrões variáveis e regras avançadas | 'banana'.replace(/a/g, 'o') |
replace(/a/gi, 'b') | Todas, ignorando caixa | Busca sem diferenciar maiúsculas | 'Aba'.replace(/a/gi, 'o') |
replace(regex, funcao) | Conforme a regex | Substituições calculadas | '10 20'.replace(/\d+/g, n => Number(n) * 2) |
O uso de uma função de substituição merece atenção porque permite processar cada resultado individualmente. No exemplo numérico, cada sequência encontrada é convertida para número e multiplicada por dois. Em situações mais avançadas, grupos de captura podem reorganizar dados. Uma data no formato 2026-07-20 pode ser exibida como 20/07/2026 com data.replace(/(\d{4})-(\d{2})-(\d{2})/, '$3/$2/$1'). Os grupos entre parênteses são referenciados por $1, $2 e $3 na string de substituição.
Exemplos úteis de JavaScript replace no dia a dia
Em formulários, é comum remover símbolos de documentos e telefones antes do envio ao servidor. Para manter apenas dígitos, utilize valor.replace(/\D/g, ''). A expressão \D significa qualquer caractere que não seja um dígito. Dessa forma, '(11) 99999-0000' torna-se '11999990000'. Ainda assim, remover caracteres não substitui uma validação formal: as regras do dado devem ser verificadas separadamente.

Outro caso recorrente é criar slugs. Um fluxo básico inclui converter o texto para minúsculas, eliminar espaços excedentes e trocar espaços por hífens: titulo.toLowerCase().trim().replace(/\s+/g, '-'). Para produção, a rotina pode precisar lidar com acentos, pontuação, caracteres Unicode e hífens duplicados. A API de internacionalização e métodos de normalização podem complementar esse processo, conforme o objetivo do projeto.
Para compreender os padrões disponíveis, a referência de expressões regulares em JavaScript da MDN é um material de autoridade útil. Além disso, a especificação ECMAScript publicada pela ECMA descreve o comportamento formal da linguagem. Em projetos profissionais, consultar a documentação e testar em um ambiente isolado evita que uma regex aparentemente curta gere manutenção difícil ou efeitos inesperados.
Dúvidas comuns sobre replace e replaceAll
Qual é a diferença entre javascript replace e replaceAll?
O método replace() troca apenas a primeira ocorrência quando recebe uma string como busca. Já replaceAll() troca todas as ocorrências desse texto. O replace também pode operar globalmente se receber uma expressão regular com a flag g.
Por que replace não altera minha variável original?
Strings são imutáveis em JavaScript. O método gera uma nova string e preserva a anterior. Para guardar a alteração, faça uma atribuição, como nome = nome.replace('A', 'B'), desde que a variável possa ser reatribuída.
Como substituir todas as ocorrências sem usar replaceAll?
Utilize uma expressão regular global. Por exemplo, texto.replace(/erro/g, 'acerto') altera todas as ocorrências exatas de erro. Se desejar ignorar maiúsculas e minúsculas, use /erro/gi.
É possível usar replace para remover caracteres?
Sim. Basta definir uma string vazia como substituição. O código texto.replace(/[-./]/g, '') remove hífens, pontos e barras de todas as posições encontradas. Essa técnica é frequente na limpeza de dados formatados.
Quando devo usar uma função no segundo argumento de replace?
Use uma função quando o valor substituto depender do trecho localizado, da posição ou de grupos capturados pela regex. É indicado para cálculos, formatações dinâmicas, mascaramento parcial de dados e transformações que não podem ser resolvidas por um texto fixo.
Conclusão sobre o uso de javascript replace
O javascript replace é um recurso central para a manipulação de strings e atende desde correções simples até transformações guiadas por expressões regulares. A chave para usá-lo bem é compreender que ele retorna uma nova string, substitui somente a primeira ocorrência em buscas literais e ganha alcance global com regex apropriada. Quando a meta for trocar todas as ocorrências de um texto fixo, replaceAll JavaScript oferece uma alternativa clara e moderna. Ao combinar essas ferramentas com testes, validação de entrada e padrões legíveis, desenvolvedores tornam suas rotinas de texto mais robustas, seguras e fáceis de manter.
Fontes e documentação consultada
- MDN Web Docs — String.prototype.replace().
- MDN Web Docs — String.prototype.replaceAll().
- MDN Web Docs — Guia de expressões regulares.
- ECMA International — Especificação ECMAScript.
Isenção de responsabilidade
Este conteúdo tem finalidade educacional e informativa. Os exemplos de javascript replace devem ser adaptados ao contexto técnico, às versões de navegadores, ao Node.js e aos requisitos de segurança de cada projeto. Antes de aplicar rotinas de substituição em dados sensíveis, sistemas de produção ou conteúdo fornecido por usuários, realize testes adequados, valide entradas e consulte a documentação oficial das tecnologias utilizadas.
Compartilhar este post
Pesquisador, empresário e escritor focado em educação, orientação sobre negócios. Escreve sobre diversos assuntos com abordagem prática e acessível para o público brasileiro.