Testador de Regex para JavaScript

Digite uma expressão regular e veja cada correspondência destacada enquanto digita, com grupos de captura, prévia de substituição e uma biblioteca de padrões prontos.

Roda no seu navegadorSem cadastroNada é enviado

Correspondências destacadas

    
Use $1, $<name>, $& (correspondência inteira)
Detalhes das correspondências
#ÍndiceCorrespondênciaGrupos
Cola de regex
.Qualquer caractere exceto quebra de linha (qualquer um com s)
\d \w \sDígito, caractere de palavra, espaço em branco
\D \W \SNão dígito, não palavra, não espaço em branco
[abc] [^abc]Qualquer um / nenhum de a, b, c
[a-z0-9]Intervalo de caracteres
\p{L} \p{N}Letra / número Unicode (requer u)
^ $Início / fim da entrada (da linha com m)
\b \BLimite de palavra / não limite
* + ?0 ou mais, 1 ou mais, 0 ou 1
{n} {n,} {n,m}Exatamente n, pelo menos n, entre n e m
*? +? ??Preguiçoso (o mínimo possível)
a|ba ou b
(…)Grupo de captura, referenciado como $1
(?<name>…)Grupo nomeado, $<name>
(?:…)Grupo de não captura
\1 \k<name>Retrorreferência
(?=…) (?!…)Lookahead / lookahead negativo
(?<=…) (?<!…)Lookbehind / lookbehind negativo
\. \* \\Caracteres literais escapados
\n \t \rQuebra de linha, tab, retorno de carro
\uFFFFUnidade de código Unicode
\u{1F600}Code point (requer u)
$&Correspondência inteira em uma substituição
$` $'Texto antes / depois da correspondência

Como usar: Testador de Regex

  1. Digite seu padrão entre as barras, sem as / ao redor.
  2. Ative flags como g (todas as correspondências), i (ignorar maiúsculas/minúsculas) e m (multilinha).
  3. Cole seu texto de teste. As correspondências são destacadas à direita e listadas abaixo com o índice e os grupos de captura.
  4. Marque Substituir e informe uma substituição como $1 ou $<name> para visualizar o String.replace.
  5. 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

FlagNomeEfeito
gglobalEncontra todas as correspondências em vez de parar na primeira.
iignoreCaseLetras correspondem independentemente de maiúsculas/minúsculas.
mmultiline^ e $ correspondem no início e no fim de cada linha.
sdotAll. também corresponde a quebras de linha.
uunicodeTrata o padrão como code points; habilita \p{…} e \u{…}.
ystickySó corresponde na posição atual de lastIndex.
dhasIndicesInforma 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.

Ferramentas relacionadas