Testador de expressões regulares (regex)

Teste um regex JavaScript: correspondências, grupos e prévia da substituição.

Sintaxe do JavaScript (ECMAScript), escrita sem as barras.

Flags

Use $1, $<nome>, $& para a correspondência inteira e $$ para um cifrão.

Correspondências

Digite um padrão para ver as correspondências.

O que esta ferramenta faz

Uma expressão regular (regex) é um padrão curto que descreve um conjunto de textos, como "quatro dígitos, um hífen e dois dígitos" ou "tudo o que está entre colchetes angulares". Esta ferramenta testa um padrão no seu texto enquanto você digita: destaca cada correspondência, mostra a posição, indica o que cada grupo capturou e exibe a prévia de uma substituição como $2, $1. O que você cola não é enviado a lugar nenhum, a busca roda no seu navegador.

Ela usa o mecanismo de expressões regulares do próprio navegador, ou seja, o dialeto JavaScript (ECMAScript). É o certo para JavaScript, TypeScript e Node.js. Python, PHP e Java têm pequenas diferenças, então confira os recursos específicos na documentação de cada linguagem.

Como testar um padrão

  1. Digite o padrão no primeiro campo, sem as barras ao redor. \d{4}-\d{2} é o padrão; /\d{4}-\d{2}/g é como aparece no código.
  2. Ligue as flags de que precisa. A g vem ativada para achar todas as correspondências, e não só a primeira.
  3. Cole ou digite o texto de teste. As correspondências são destacadas em duas cores alternadas, para distinguir as que estão coladas.
  4. Leia a tabela abaixo: cada correspondência com posição inicial e final e uma linha por grupo de captura. Um grupo que não participou aparece como tal, o que é diferente de um grupo que capturou texto vazio.
  5. Para reescrever o texto, preencha "Substituir por". Segue as regras de String.prototype.replace: $1 é o grupo 1, $<nome> um grupo nomeado, $& a correspondência inteira e $$ um cifrão.

Flags

i ignora maiúsculas, m faz ^ e $ valerem em cada linha, s deixa o ponto incluir quebras de linha, u lê o texto por pontos de código (um emoji conta como um caractere), v é uma versão mais rigorosa de u e y só casa exatamente onde a busca começa. As posições são contadas em unidades UTF-16 a partir de 0, como no JavaScript.

Exemplo

Com o texto 2026-10-13 e o padrão (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) há uma correspondência na posição 0, com 10 caracteres e três grupos: 2026, 10 e 13. Com "Substituir por" igual a $<day>/$<month>/$<year>, a prévia mostra 13/10/2026. Outro caso: em <b>negrito</b> e <i>itálico</i>, o padrão <.+> captura a string toda porque .+ pega o máximo possível, enquanto <.+?> captura cada tag separadamente.

Por que um padrão pode travar

Alguns padrões demoram o dobro a cada caractere extra: é o retrocesso catastrófico. O caso clássico é ^(a+)+$ aplicado a uma longa sequência de letras a seguida de b. Em um serviço web isso é um risco de negação de serviço (ReDoS). Esta página executa a busca em um worker em segundo plano e a interrompe após 2 segundos, então a aba não congela. A correção costuma ser remover a repetição aninhada: ^a+$ dá o mesmo resultado na hora.

Erros comuns

  • Esquecer de escapar: o ponto casa com qualquer caractere; para um ponto literal escreva \..
  • Esperar que ^ e $ funcionem por linha sem a flag m.
  • Esquecer o g ao substituir, e só a primeira correspondência mudar.
  • Colar o padrão com as barras e as flags, como /ab+c/gi. Digite só o que fica entre as barras e use os botões de flags.

Para ver o que uma substituição mudou, cole as duas versões no comparador de textos. E se quiser agendar uma tarefa em vez de buscar texto, o explicador de cron lê um agendamento em palavras.

Perguntas frequentes

Qual dialeto de regex é usado?

O JavaScript (ECMAScript) do seu próprio navegador, adequado para JavaScript, TypeScript e Node.js. Em Python, PHP, Java ou .NET a maioria dos padrões comuns funciona igual, mas confira os recursos específicos de cada linguagem.

Meu texto é enviado para algum servidor?

Não. O padrão e o texto ficam no navegador e são processados por um worker no seu dispositivo. Nada é enviado pela rede.

Por que meu padrão foi interrompido após 2 segundos?

Provavelmente ele sofre retrocesso catastrófico: repetições aninhadas como (a+)+ em um texto longo fazem o motor testar um número exponencial de caminhos. A ferramenta interrompe a busca para a página continuar utilizável. Simplifique o padrão ou limite as repetições.

Por que as posições diferem do meu editor?

Aqui são índices de string do JavaScript, em unidades UTF-16 a partir de 0. Um emoji ocupa duas unidades e um editor pode contar por linha e coluna.