Testador de Regex & Depurador

Testador de Regex & Depuradorv4.2 Pro

Teste, depure e otimize expressões regulares em tempo real. Inspecione correspondências, grupos de captura, nós sintáticos e regras de substituição.

Mecanismo:
Fim de Linha:
Predefinições:
Bancada de Expressão e Texto de Teste
//gm
Atalhos Rápidos:
Reach out to [email protected]#1 or [email protected]#2 for inquiries. Invalid addresses like john..doe@bad#3_domain or @missing-user.org should be ignored. Admin contact: [email protected]#4.
Lista de CorrespondênciasTotal: 4
Correspondência #1: "[email protected]"Posição: [13:32] (19 caracteres)
<user>: "support"<domain>: "toolsaa.com"
Correspondência #2: "[email protected]"Posição: [36:66] (30 caracteres)
<user>: "sales.dept"<domain>: "enterprise-cloud.io"
Correspondência #3: "john..doe@bad"Posição: [105:118] (13 caracteres)
<user>: "john..doe"<domain>: "bad"
Correspondência #4: "[email protected]"Posição: [181:212] (31 caracteres)
<user>: "sec-ops"<domain>: "datacenter.internal.net"
Total de Ocorrências
4
Registradores de Captura
2 grupos
Segurança contra ReDoS
Protegido

Processamento no Navegador

Cálculo de alto desempenho executado inteiramente na memória do navegador.

Privacidade Zero Upload

Todos os dados permanecem estritamente locais, sem qualquer transmissão a servidores externos.

Exportação Pronta para Produção

Formatos de saída limpos e otimizados, prontos para integração e implantação imediata.

Referência técnica e guia de arquitetura

Testador & Depurador de Regex — Guia de referência

Teste, depure e otimize expressões regulares em tempo real. Analise correspondências de padrões, grupos de captura, explicações passo a passo de tokens e sintaxe de substituição.

Testador & Depurador de Regex — Guia de referência — Arquitetura em memória do lado do cliente e fluxo de dados
Testador & Depurador de Regex — Guia de referência — Arquitetura em memória do lado do cliente e fluxo de dados

Parâmetros-chave e controles

Padrão de Expressão RegularString de Sintaxe RegExp

Literal de expressão regular padrão contendo classes de caracteres, âncoras, quantificadores e grupos de captura em conformidade com as especificações ECMAScript RegExp.

Padrão: /(?<user>[a-zA-Z0-9._%+-]+)@(?<domain>[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/gm
Flags de Execução do RegexString de Flags Bitmask

Modificadores de compilação ativos que alteram o comportamento em tempo de execução: g (busca global), i (ignora maiúsculas/minúsculas), m (âncoras multilinhas ^ e $), s (modo dotAll onde ponto corresponde a quebras de linha), u (suporte a code points Unicode), y (correspondência sticky no índice lastIndex).

Padrão: gm
Texto de Teste do CorpusCorpus de String Bruta

O documento de entrada multilinha contra o qual a expressão regular é executada para localizar correspondências, inspecionar capturas de grupos e avaliar performance.

Padrão: sample text corpus
Padrão do Modelo de SubstituiçãoString de Substituição

Modelo para substituição de texto com suporte a referências retroativas posicionais ($1, $2), identificadores de grupos nomeados ($<name>), correspondência total ($&) e fatias de prefixo/sufixo ($`, $').

Padrão: $<user> at $<domain>

Dicas profissionais e melhores práticas

Evite Retrocesso Catastrófico (ReDoS) com Tokens Mutuamente Exclusivos

Quantificadores aninhados e ilimitados, como (a+)+ ou (.*a)+, forçam motores de Autômato Finito Não-Determinístico (NFA) a explorar O(2^n) estados ao avaliar entradas inválidas. Elimine classes de caracteres sobrepostas em repetições e priorize agrupamento atômico, quantificadores possessivos ou conjuntos estritamente negados como [^a]*a.

Atenção à Propriedade lastIndex com Estado nas Flags Global (g) e Sticky (y)

Quando uma instância RegExp possui a flag /g ou /y ativa, o motor JavaScript nativo mantém um ponteiro interno lastIndex que avança após cada correspondência. Invocar regex.test() repetidamente na mesma string alternará entre true e false, a menos que você redefina explicitamente regex.lastIndex = 0 antes da execução.

Exija a Flag Unicode (u ou v) para Caracteres Multibyte e Emojis

O regex padrão do JavaScript sem a flag /u trata pares substitutos (surrogate pairs) UTF-16 de 4 bytes como duas unidades de código de 2 bytes distintas. Um ponto (.) não corresponderá a um emoji como 🚀 (\uD83D\uDE80) como caractere único a menos que /u ou /v esteja ativo, e intervalos de classes como [\u{1F600}-\u{1F64F}] lançarão erros de sintaxe.

Diferencie a Flag Multilinha (m) da Flag DotAll (s) em Quebras de Linha

A flag /m redefine apenas as âncoras ^ e $ para corresponder ao início e fim de cada linha individual em uma string multilinha, em vez do documento inteiro. Ela NÃO permite que o caractere curinga ponto (.) corresponda a quebras de linha (\n ou \r); para o ponto cruzar limites de linha, ative explicitamente a flag /s (dotAll).

Armadilhas comuns e solução de problemas

⚠️Captura Involuntária por Quantificador Guloso Engolindo Vários Blocos HTML/XML

Quantificadores padrão (*, +, {n,}) são gulosos por padrão e consomem o máximo de texto possível. Para parar no primeiro delimitador correspondente, adicione uma interrogação para criar um quantificador preguiçoso (por exemplo, altere <div.*> para <div.*?>) ou utilize uma classe de caracteres negada (como <[^>]*>).

⚠️Barras não Escapadas ou Metacaracteres Reservados Causando Erros de Sintaxe

Caracteres com significado sintático especial em regex (\, ^, $, ., |, ?, *, +, (, ), [, ], {, }) precisam ser escapados com uma barra invertida antecedente quando correspondidos literalmente. Ao construir padrões dinamicamente a partir de strings via new RegExp(), lembre-se de que é necessário escape duplo (\\) no código-fonte.

⚠️Lookahead Negativo (?!pattern) Confundido com Classe de Caracteres Negada [^chars]

Uma classe de caracteres negada [^abc] consome exatamente um caractere que não seja 'a', 'b' ou 'c'. Já uma asserção de lookahead negativo (?!abc) é uma asserção de largura zero que valida se a sequência posterior não é 'abc', sem consumir nenhum caractere do texto de teste.

Perguntas frequentes (FAQ)

Como testar regex sem risco de retrocesso catastrófico e vulnerabilidade ReDoS?▼

O retrocesso catastrófico ocorre quando um motor NFA encontra quantificadores aninhados com subpadrões sobrepostos (como (a+)+$ ou (x|y+)*) contra textos que falham na validação, gerando complexidade computacional exponencial O(2^n). Para prevenir isso, garanta que grupos repetidos sejam mutuamente exclusivos, substitua curingas gulosos como .* por classes negadas restritas como [^\n,]+ e avalie o tempo de execução com entradas de teste adversárias.

Qual é a diferença entre quantificadores gulosos, preguiçosos e possessivos em regex?▼

Quantificadores gulosos (*, +, {min,max}) consomem o máximo de texto possível e realizam retrocesso (backtracking) passo a passo caso o padrão geral falhe. Quantificadores preguiçosos (*?, +?, {min,max}?) consomem o mínimo possível, expandindo caractere por caractere conforme a necessidade do padrão. Quantificadores possessivos (*+, ++, {min,max}+), suportados em PCRE e Java, consomem tudo avidamente e nunca retrocedem, falhando imediatamente caso os tokens posteriores não coincidam.

Por que o regex test retorna true e depois false na mesma string?▼

Quando uma expressão regular é compilada com a flag global (/g) ou sticky (/y) em JavaScript, o objeto RegExp preserva estado atualizando sua propriedade interna lastIndex para a posição seguinte à última correspondência bem-sucedida. Se chamado novamente, a busca recomeça a partir de lastIndex e não do início da string; ao alcançar o fim do texto, lastIndex é zerado e o método retorna false. Redefina regexObject.lastIndex = 0 antes de chamadas subsequentes.

Como fazer correspondência em múltiplas linhas incluindo quebras de linha em regex?▼

Para corresponder através de quebras de linha, ative a flag dotAll (/s), que configura o ponto curinga (.) para capturar quebras de linha (\n, \r) no ECMAScript 2018+, Python e motores modernos. Em ambientes legados sem suporte a /s, use a classe de caracteres complementares [\s\S] ou [\d\D], que abrange qualquer caractere existente (espaço ou não-espaço), cruzando eficazmente todas as linhas.

Qual é a diferença entre grupos de captura e grupos de não captura?▼

Grupos de captura declarados como (padrao) retêm a substring correspondida na memória, associam a ela um índice de retrovisor numérico ($1, $2, ...) e a disponibilizam nos arrays de correspondência. Grupos de não captura declarados como (?:padrao) aplicam agrupamento, quantificadores ou alternâncias sem alocar memória de captura ou popular índices no array de saída, otimizando o processamento do motor.

Ferramentas e utilitários relacionados

Todas as ferramentas →