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
- Digite o padrão entre as barras, sem o
/…/em volta, ou carregue um do menu Padrões comuns. - Ligue ou desligue as flags:
gpara achar todas as correspondências,ipara ignorar maiúsculas e minúsculas,mpara fazer^e$funcionarem por linha, e assim por diante. - Cole ou digite o texto de teste. As correspondências são destacadas em cores alternadas para que as vizinhas continuem distinguíveis.
- 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.