Escreva uma expressão regular, cole um texto e veja na hora o que foi encontrado, com cada correspondência destacada e os grupos capturados listados. A execução roda isolada da página e é interrompida se demorar demais, então uma expressão problemática não trava o seu navegador.
Exemplos:
Usa o motor de regex do JavaScript do seu navegador. A execução roda isolada e é interrompida após 2 segundos.
Como usar
- Digite a expressão sem as barras, por exemplo
\d{5}-?\d{3}em vez de/\d{5}-?\d{3}/. - Marque as flags de que precisa. A
gvem marcada para buscar todas as ocorrências. - Cole o texto de teste e clique em Testar (ou pressione Enter no campo da expressão).
- Confira o texto destacado e a lista de correspondências com seus grupos. Copiar como JSON leva o resultado para um teste automatizado.
Flags suportadas
| Flag | Efeito |
|---|---|
g | Busca todas as ocorrências, não só a primeira. |
i | Ignora a diferença entre maiúsculas e minúsculas. |
m | ^ e $ passam a valer para o início e o fim de cada linha. |
s | O ponto (.) passa a aceitar quebra de linha. |
u | Modo Unicode: emoji e outros caracteres fora do plano básico contam como um caractere, e escapes como \p{L} funcionam. |
y | Aderente: a correspondência precisa começar exatamente onde a anterior terminou. |
Exemplos prontos
| Objetivo | Expressão |
|---|---|
| CEP com ou sem hífen | \b\d{5}-?\d{3}\b |
| Data dd/mm/aaaa (formato, não calendário) | \b(0[1-9]|[12]\d|3[01])/(0[1-9]|1[0-2])/(\d{4})\b |
| UUID v4 | \b[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\b com i |
| Linha de log com grupos nomeados | ^(?<data>\d{4}-\d{2}-\d{2}) (?<nivel>INFO|WARN|ERROR) (?<msg>.*)$ com gm |
Validar e-mail por regex é sempre uma aproximação: o exemplo simples da ferramenta pega os formatos do dia a dia, mas a especificação completa de endereços é bem mais ampla. Para cadastro, o teste definitivo é enviar uma confirmação para o endereço.
Como funciona
A expressão é compilada com o RegExp do próprio navegador, o mesmo motor usado por JavaScript, TypeScript, Cypress e Playwright. Erros de sintaxe são traduzidos para português, como “parêntese aberto sem fechamento”. A busca roda em um Web Worker, uma thread separada da página. Se ela passar de 2 segundos, o worker é encerrado e a ferramenta avisa.
Isso protege contra o retrocesso catastrófico (ReDoS): expressões como ^(a+)+$ testadas contra aaaa…ab fazem o motor tentar um número exponencial de combinações. O exemplo “expressão catastrófica” mostra o efeito sem travar nada. Em produção, o mesmo padrão pode derrubar um servidor com uma única requisição.
O texto destacado é montado com nós de texto do navegador, nunca como HTML. Por isso <script> no texto de teste aparece apenas como texto.
Uso em QA e desenvolvimento
- Conferir a regex de validação de um campo antes de escrever os casos de teste: o que deveria passar e o que deveria ser recusado.
- Extrair IDs, tokens de correlação ou mensagens de erro de logs grandes.
- Montar seletores e asserções com regex em Cypress (
cy.contains(/Total: R\$ \d+/)) e Playwright (toHaveText(/…/)). - Revisar expressões que podem causar ReDoS em code review.
Erros comuns
- Esquecer as âncoras: sem
^e$,\d{8}também aceita um número de 20 dígitos, porque encontra 8 dígitos dentro dele. - Ponto sem escape:
.aceita qualquer caractere. Para o ponto literal, use\.. - Quantificador guloso:
".*"pega do primeiro ao último par de aspas da linha. Use".*?"ou"[^"]*". - Diferenças entre linguagens: lookbehind, grupos nomeados e classes Unicode variam entre JavaScript, Java, Python e PCRE.
Limitações
- Usa a sintaxe de regex do JavaScript. Recursos exclusivos de outras linguagens, como grupos atômicos e quantificadores possessivos, não existem aqui.
- Expressão de até 2.000 caracteres, texto de até 100.000 e no máximo 1.000 correspondências. A lista detalhada mostra as 200 primeiras.
- A execução para depois de 2 segundos. Uma expressão lenta, mas correta, pode precisar de um texto menor.
Perguntas frequentes
Por que só aparece uma correspondência?
Provavelmente a flag g está desmarcada. Sem ela, o JavaScript para na primeira ocorrência.
O que é “(não participou)” em um grupo?
O grupo existe na expressão, mas ficou fora daquela correspondência. Acontece em alternativas como (a)|b quando o texto encontrado foi o b.
A expressão funciona aqui, mas não no Java ou no Python. Por quê?
Cada linguagem tem seu dialeto de regex. As diferenças mais comuns estão na sintaxe de grupos nomeados, no lookbehind e no tratamento de Unicode.
Meu texto é enviado para algum servidor?
Não. Tudo roda no seu navegador, inclusive o worker.
Ferramentas relacionadas
- Formatador e interpretador de logs: filtre e organize logs antes de extrair dados.
- Comparador de textos: veja o que mudou entre duas saídas.
