Como usar: Testador de Regex
- Digite seu padrão entre as barras, sem as
/ ao redor. - Ative flags como
g (todas as correspondências), i (ignorar maiúsculas/minúsculas) e m (multilinha). - Cole seu texto de teste. As correspondências são destacadas à direita e listadas abaixo com o índice e os grupos de captura.
- Marque Substituir e informe uma substituição como
$1 ou $<name> para visualizar o String.replace. - Escolha um padrão na Biblioteca de padrões para começar de uma regex testada de e-mail, URL, IP ou data.
Expressões regulares em JavaScript
Este testador usa o próprio motor RegExp do seu navegador, então os resultados são exatamente o que String.match, matchAll, replace e RegExp.exec retornam em JavaScript e Node.js. Isso inclui a sintaxe moderna: grupos nomeados (?<name>…), lookbehind (?<=…), escapes de propriedades Unicode como \p{L} com a flag u e índices de correspondência com a flag d.
O que as flags fazem
| Flag | Nome | Efeito |
g | global | Encontra todas as correspondências em vez de parar na primeira. |
i | ignoreCase | Letras correspondem independentemente de maiúsculas/minúsculas. |
m | multiline | ^ e $ correspondem no início e no fim de cada linha. |
s | dotAll | . também corresponde a quebras de linha. |
u | unicode | Trata o padrão como code points; habilita \p{…} e \u{…}. |
y | sticky | Só corresponde na posição atual de lastIndex. |
d | hasIndices | Informa as posições de início e fim de cada grupo de captura. |
Proteção contra backtracking catastrófico
Padrões com quantificadores aninhados, como (a+)+$ ou (\w|\d)*x, podem levar tempo exponencial em entradas que quase correspondem. Em uma página web comum, isso congela a aba. Aqui, cada busca roda em um Web Worker em segundo plano que é interrompido após um segundo, e você recebe um aviso claro em vez de um navegador travado. O mesmo padrão em código de produção pode ser uma vulnerabilidade de ReDoS, então trate o aviso como um bug a corrigir.
Dicas para escrever regexes melhores
- Ancore os padrões com
^ e $ ao validar valores inteiros; caso contrário, uma correspondência em qualquer parte da string passa.
- Prefira classes específicas como
[^"]* em vez de .*; elas são mais rápidas e evitam correspondências excessivas.
- Use grupos de não captura
(?:…) quando não precisar do valor capturado.
- Dê nomes aos seus grupos.
match.groups.year é mais fácil de ler que match[1].
Perguntas frequentes
Qual sabor de regex este testador usa?
JavaScript (ECMAScript), por meio do RegExp embutido no seu navegador. A maior parte da sintaxe é compartilhada com PCRE, Python e Java, mas recursos como quantificadores possessivos, grupos atômicos e modificadores inline como (?i) não existem em JavaScript.
Por que meu padrão só encontra uma correspondência?
Sem a flag g (global), o JavaScript para depois da primeira correspondência. Ative g para encontrar todas as ocorrências.
Como referenciar grupos na substituição?
Use $1, $2… para grupos numerados, $<name> para grupos nomeados, $& para a correspondência inteira e $$ para um cifrão literal.
Por que o testador parou com timeout?
O padrão levou mais de um segundo na sua entrada, o que quase sempre significa backtracking catastrófico. Procure quantificadores aninhados como (x+)+ ou alternativas sobrepostas como (a|a)* e reescreva-os para que cada caractere só possa ser casado de uma forma.
Meus dados de teste são enviados para algum lugar?
Não. A busca roda localmente em um Web Worker dentro do seu navegador. Seu padrão e seu texto ficam salvos apenas no seu próprio navegador, para que continuem lá quando você voltar.