Testador de regex

Teste expressões regulares com destaque das correspondências ao vivo.

Sobre esta ferramenta

Escreva uma expressão regular JavaScript, ative ou desative flags e veja cada correspondência destacada enquanto digita, junto com os grupos de captura e uma pré-visualização da substituição.

Como usar

  1. Digite uma expressão regular no campo do padrão, sem as barras ao redor.
  2. Ative ou desative as flags: g para todas as correspondências, i para ignorar maiúsculas e minúsculas, m para âncoras multilinha, s para que . corresponda a quebras de linha, u para Unicode.
  3. Cole um texto de teste e veja cada correspondência destacada, com os grupos de captura listados abaixo.
  4. Ative Substituir para pré-visualizar uma substituição usando $1, $2 ou $<name>.

Perguntas

Qual é o sabor de regex usado?
JavaScript (ECMAScript). Para padrões do dia a dia, é muito parecido com PCRE e Python, mas o suporte a lookbehind, a sintaxe de grupos nomeados e alguns escapes variam entre as linguagens.
Como faço para corresponder a um ponto ou colchete literal?
Escape com uma barra invertida: \. corresponde a um ponto, \( a um parêntese, \[ a um colchete. Dentro de uma classe de caracteres como [.], a maioria dos caracteres perde o significado especial.
Qual é a diferença entre .* e .*?
.* é guloso e corresponde ao máximo possível; .*? é preguiçoso e corresponde ao mínimo possível. A correspondência preguiçosa costuma ser o que você quer ao extrair texto entre dois marcadores.
Como funcionam os grupos nomeados?
Escreva (?<name>...) para capturar em um grupo nomeado. O valor dele aparece nos detalhes da correspondência e você pode usá-lo em uma substituição como $<name>.
Por que minha regex corresponde a uma string vazia?
Um padrão em que tudo é opcional, como a* ou (\d+)?, pode corresponder a zero caracteres, e faz isso em cada posição onde nada mais longo se encaixa. A tabela Detalhes da correspondência mostra essas correspondências como (vazio). Use + em vez de *, ou torne pelo menos uma parte do padrão obrigatória.
Como usar a correspondência inteira em uma substituição?
Escreva $& para a correspondência inteira, $1 e $2 para grupos numerados, $<name> para grupos nomeados e $$ para um cifrão literal. Por exemplo, substituir \d+ por [$&] coloca cada número entre colchetes. Ative a flag g para substituir todas as ocorrências, e não só a primeira.
Uma regex pode travar o navegador?
Sim. Quantificadores aninhados, como (a+)+ ou (\w+\s?)*$, podem fazer backtracking exponencial em textos que quase correspondem, o que se chama backtracking catastrófico. A correspondência roda na aba do seu navegador, então a página pode travar até você fechá-la. Reescreva o padrão para que cada caractere só possa corresponder de uma maneira, por exemplo a+ em vez de (a+)+.

Flags de regex explicadas: g, i, m, s e u

As flags de regex mudam o comportamento do padrão inteiro. g (global) encontra todas as correspondências em vez de parar na primeira. Sem ela, este testador destaca só a primeira correspondência e Substituir troca só a primeira ocorrência, exatamente como o String.replace do JavaScript. i ignora maiúsculas e minúsculas, então /error/i corresponde a Error e ERROR. m faz ^ e $ corresponderem ao início e ao fim de cada linha, o que você precisa ao testar um padrão em um arquivo de log.

A flag s, chamada dotall, faz o . corresponder também a quebras de linha, então <p>.*?</p> pode abranger várias linhas. A flag u ativa o modo Unicode: emoji e outros caracteres fora do Plano Multilíngue Básico contam como um caractere, os escapes de propriedades Unicode ficam disponíveis e escapes desconhecidos, como \- fora de uma classe de caracteres, viram erros em vez de serem aceitos em silêncio. A flag sticky y e a flag d para índices das correspondências não estão disponíveis aqui.

Como testar uma regex com dados reais

Teste uma expressão regular com amostras realistas, não só com o caso ideal. Cole um texto que inclua valores que devem corresponder e valores que não devem, e observe o destaque. Para uma data ISO, comece com \d\d\d\d-\d\d-\d\d e confira se 2026-11-08 é destacado enquanto 2026-1-8 não é. Depois repare que 12026-11-08 ainda corresponde em parte. Adicionar limites de palavra \b, ou ^ e $ com a flag m, resolve isso.

A tabela Detalhes da correspondência lista cada correspondência com seu índice e grupos de captura, numerados como $1, $2 e assim por diante, além dos grupos nomeados pelo nome, o que é a forma mais rápida de conferir se um grupo captura o que você espera. Para endereços de e-mail, aceite que nenhuma regex prática segue totalmente a RFC: um padrão como [\w.+-]+@[\w-]+\.[\w.-]+ pega erros de digitação, e um e-mail de confirmação faz a verificação de verdade. Para desmontar uma URL, use Codificar, decodificar e analisar URLs.

Como usar uma regex testada em JavaScript, Python e grep

Um padrão testado aqui pode ir direto para um literal de regex em JavaScript, como /\d+/g, sem escape extra. Quando você o monta a partir de uma string, como com new RegExp() ou na maioria das outras linguagens, cada barra invertida precisa ser duplicada, então \d+ vira "\\d+" dentro de um literal de string comum. Raw strings do Python, como r"\d+", e strings com crase em Go evitam a duplicação. Esquecer isso é o motivo mais comum de uma regex funcionar no testador, mas não no código.

As flags ficam em lugares diferentes em outras linguagens. O Python usa re.IGNORECASE ou um (?i) inline, e o grep usa -i para maiúsculas e minúsculas, com -E ou -P escolhendo a sintaxe. O lookbehind também muda: o JavaScript permite lookbehind de tamanho variável, enquanto o módulo re do Python exige largura fixa, então (?<=\$|USD )\d+ falha lá. O Gerador de comandos grep e ripgrep transforma um padrão testado em um comando pronto para rodar, com cada flag explicada.

Algo não está funcionando ou um resultado parece errado? Relatar um problema com esta ferramenta