Pack Camo

Regex Tester para JavaScript

Teste expressões regulares JavaScript com correspondências ao vivo, grupos e substituição. Tudo roda localmente — nada é enviado para servidor nenhum.

Entrada
Pattern · flags · test text
Saída
Matches · groups · replaced text

Texto de teste

Agendando em vez de procurar padrões? Abrir o Gerador de Expressões Cron

Teste expressões regulares enquanto digita

Este regex tester executa seu padrão com o motor JavaScript do seu próprio navegador, o mesmo que seu código Node.js ou front-end vai usar, e destaca cada correspondência no texto de teste enquanto você digita. Ao lado, você tem a lista de correspondências com posições e grupos de captura, uma prévia de substituição e uma explicação linha a linha do que cada parte do padrão faz. Seu padrão e seu texto nunca saem da página.

Como testar uma regex

  1. Digite o padrão entre as barras, sem o /…/ em volta, ou carregue um do menu Padrões comuns.
  2. Ligue ou desligue as flags: g para achar todas as correspondências, i para ignorar maiúsculas e minúsculas, m para fazer ^ e $ funcionarem por linha, e assim por diante.
  3. Cole ou digite o texto de teste. As correspondências são destacadas em cores alternadas para que as vizinhas continuem distinguíveis.
  4. Abra Correspondências para ver a posição e os grupos de cada uma, Explicar para uma análise em linguagem simples ou Substituir para ver a prévia de uma substituição com $1, $<name> ou $&.

Flags em expressões regulares JavaScript

g (global)
Encontra todas as correspondências em vez de parar na primeira. Substituir também troca todas.
i (ignore case)
As letras correspondem independentemente de maiúsculas, então /cat/i encontra Cat e CAT.
m (multiline)
^ e $ correspondem ao início e ao fim de cada linha, não só do texto inteiro.
s (dotAll)
O ponto também corresponde a quebras de linha, que de outra forma ele pula.
u (unicode)
Trata o padrão como code points Unicode: emojis contam como um caractere e os escapes de propriedade \p{…} funcionam. Sintaxe mais rígida.
v (unicodeSets)
O sucessor mais novo e mais rígido do u, que acrescenta operações de conjunto como [\p{L}--[a-z]] dentro de classes. Só aparece quando seu navegador o suporta.
y (sticky)
Cada correspondência precisa começar exatamente onde a anterior terminou; útil para tokenizadores.

Grupos, referências e substituição

Parênteses capturam: (\d{4})-(\d{2}) guarda o ano no grupo 1 e o mês no grupo 2. Dê um nome ao grupo com (?<year>\d{4}) e ele também fica disponível como groups.year no código e como $<year> em uma substituição. Use (?:…) quando precisar agrupar para uma alternância ou um quantificador sem capturar.

Dentro do padrão, \1 ou \k<name> corresponde ao mesmo texto que um grupo capturou antes, e é assim que o padrão de palavras repetidas da biblioteca encontra “de de”. Lookarounds como (?=…), (?!…), (?<=…) e (?<!…) testam o que vem antes ou depois sem consumir; o padrão de senha forte usa quatro lookaheads para exigir cada tipo de caractere.

Na string de substituição, $& insere a correspondência inteira, $1–$99 um grupo numerado, $<name> um grupo nomeado, $` e $' o texto antes e depois da correspondência, e $$ um cifrão literal.

Quantificadores: gulosos e preguiçosos

Os quantificadores dizem quantas vezes o item antes deles pode se repetir: * zero ou mais, + uma ou mais, ? zero ou uma, e {2,5} entre duas e cinco. Por padrão eles são gulosos e pegam o máximo de texto possível, devolvendo um pouco se o resto do padrão falhar. Acrescente um ponto de interrogação para torná-lo preguiçoso: <.+?> corresponde a uma única tag HTML, enquanto <.+> vai do primeiro < ao último > da linha.

A aba Explicar detalha isso para cada quantificador do seu padrão, para você ver de relance quais partes se repetem, quantas vezes e se são gulosas ou preguiçosas. Classes de caracteres como [A-Za-z0-9_] são listadas faixa a faixa, e escapes como \d, \w e \s recebem nome, o que torna muito mais rápido ler um padrão que você herdou de outra pessoa.

Backtracking catastrófico, e por que este tester não trava

Alguns padrões levam tempo exponencial em entradas que quase correspondem. O exemplo clássico é (a+)+$ contra uma longa sequência de a’s seguida de um b: o motor tenta todas as formas de dividir os a’s entre a repetição interna e a externa antes de desistir. Em produção, isso é um risco real de negação de serviço, conhecido como ReDoS.

Aqui a correspondência roda em um worker separado em segundo plano, com limite de tempo. Se um padrão demora demais, o worker é interrompido e você vê um aviso em vez de uma aba travada. A correção habitual é remover quantificadores aninhados sobre os mesmos caracteres, tornar as alternativas mutuamente exclusivas ou ancorar o padrão. Os resultados param em 10.000 correspondências.

Uma alternativa ao regex101 focada em JavaScript

Ferramentas como o regex101 suportam vários sabores de regex; esta suporta propositalmente apenas um, o motor ECMAScript do seu navegador, então o que corresponde aqui corresponde em JavaScript e TypeScript. Recursos do PCRE como quantificadores possessivos, grupos atômicos e recursão não existem em JavaScript, e o explicador trata essa sintaxe literalmente. A biblioteca cobre padrões que as pessoas buscam todo dia: e-mail, URL, endereços IPv4 e IPv6, datas ISO, cores hex, UUIDs, telefones E.164, slugs, horários de 24 horas e senhas fortes. Cada um é um padrão pragmático, não uma gramática RFC completa; valide entradas críticas também com um parser dedicado.

Trabalhando com agendamentos em vez de strings? O Gerador de Expressões Cron explica a sintaxe cron do mesmo jeito que esta ferramenta explica regex.

Perguntas frequentes

Qual sabor de regex este tester usa?
JavaScript (ECMAScript), executado pelo motor do seu próprio navegador. Os resultados batem com o que RegExp, String.prototype.match e replace fazem no Node.js, Deno, Bun e em navegadores da mesma versão.
Como fazer a regex funcionar em várias linhas?
Ative a flag m para que ^ e $ correspondam em cada linha, e a flag s se o ponto também deve corresponder a quebras de linha. Sem s, use [\s\S] para corresponder a qualquer caractere, incluindo quebra de linha.
Como usar um grupo de captura nomeado em uma substituição?
Dê nome ao grupo com (?<name>…) e refira-se a ele como $<name> na string de substituição. Grupos numerados são $1, $2 e assim por diante, e $& insere a correspondência inteira.
Por que minha regex só encontra a primeira correspondência?
Sem a flag g, uma regex JavaScript para depois da primeira correspondência, e o replace troca só ela. Ative g para encontrar e substituir todas as ocorrências.
O que é backtracking catastrófico?
É quando um padrão com quantificadores aninhados ou sobrepostos, como (a+)+, faz o motor tentar um número exponencial de caminhos em uma entrada que quase corresponde. Este tester interrompe essas execuções após um limite de tempo em vez de travar a página.
Qual é uma boa regex para endereços de e-mail?
Um padrão prático é [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}, que está na biblioteca. Nenhuma regex implementa totalmente o padrão de e-mail, então o único teste real de um endereço é enviar um e-mail de confirmação para ele.
Meus dados de teste são enviados para algum lugar?
Não. A correspondência, a substituição e a explicação rodam no seu navegador, então você pode testar padrões com segurança em logs ou dados de clientes.