Testador de Regex

Teste expressões regulares contra um texto e veja as ocorrências.

Escopo: motor de regex do JavaScript

O teste roda com o RegExp nativo do navegador, sempre com a flag gaplicada internamente (exigida por matchAll). Lookahead e lookbehind são suportados ((?=...), (?!...), (?<=...),(?<!...)), exceto em versões de Safari anteriores à 16.4.

Referência rápida de sintaxe

Casos de uso comuns

Validação de formato (e-mail, CPF, telefone com DDD) e extração via grupos de captura em logs, planilhas coladas ou respostas de API — a lista de grupos capturados aparece ao lado de cada ocorrência.

As flags e o que elas mudam

Guloso e preguiçoso, na prática

Quantificadores como * e + são gulosos por padrão: consomem o máximo possível e depois recuam até o padrão fechar. Isso produz o erro clássico de extração em HTML ou tags.

Sobre o texto <b>um</b> e <b>dois</b>, o padrão <b>.*</b> captura tudo de uma vez, do primeiro <b> até o último </b>. Já <b>.*?</b>, com o quantificador preguiçoso, devolve as duas ocorrências separadas — quase sempre o que se queria.

Backtracking catastrófico

Alguns padrões aparentemente inofensivos levam o motor a um número exponencial de tentativas. O caso típico é um quantificador dentro de outro, como (a+)+$ ou (\s*\w+)*$, aplicado a uma string que quase casa mas falha no fim.

Com dezenas de caracteres, o navegador pode travar por segundos ou minutos. Quando isso acontece em um servidor, com o padrão aplicado a entrada vinda do usuário, o resultado é uma vulnerabilidade de negação de serviço conhecida como ReDoS.

Se o teste aqui demorar de forma anormal com um texto pequeno, é sinal para revisar o padrão — provavelmente há aninhamento de quantificadores que pode ser reescrito de forma mais específica.

Padrões brasileiros úteis

Uma ressalva importante: regex confere formato, não validade. Um padrão de CPF aceita111.111.111-11, que é sintaticamente perfeito e inválido na prática. A validação de verdade exige o cálculo do dígito verificador — para isso, use o validador de CPF ou o validador de CNPJ. E note que o CNPJ alfanumérico quebra qualquer padrão baseado apenas em \d.

O mesmo vale para e-mail: a especificação é complexa o bastante para que nenhuma regex razoável a cubra por completo. O caminho prático é verificar apenas a estrutura básica e confirmar a existência do endereço enviando uma mensagem — abordagem detalhada no validador de e-mail.

Processamento 100% local

Padrão, flags e texto de teste são processados inteiramente no navegador. Nada é enviado a servidor, então dá para testar contra dados sensíveis (e-mails de clientes, documentos, trechos de log) sem risco.

Perguntas frequentes

Qual a diferença entre as flags g, i e m?

"g" (global) retorna todas as ocorrências em vez de parar na primeira; "i" ignora diferença entre maiúsculas e minúsculas; "m" faz "^" e "$" casarem no início/fim de cada linha, não só do texto inteiro. Podem ser combinadas, como "gi" ou "gim".

Meus dados são enviados para algum servidor?

Não. Padrão, flags e texto de teste são processados inteiramente no navegador, usando o suporte nativo do JavaScript a regex — seguro para testar contra e-mails, documentos ou trechos de log internos.

Uma regex que casa string vazia (ex.: /a*/) trava a ferramenta em loop infinito?

Não. A busca roda sempre com a flag "g" aplicada internamente (exigida por matchAll) e, ao encontrar um match de tamanho zero, a iteração para logo após registrá-lo, em vez de repetir infinitamente no mesmo ponto. Por isso um padrão desse tipo mostra só a primeira ocorrência vazia, não uma lista repetida.

Por que ^ e $ não funcionam no meu texto de várias linhas?

Sem a flag "m", esses âncoras casam apenas no início e no fim da string inteira. Com "m" ativada, eles passam a casar no começo e no fim de cada linha — é a causa mais frequente de padrões que "deveriam funcionar" e não funcionam.

Meu padrão travou o navegador. O que aconteceu?

Provavelmente backtracking catastrófico: quantificadores aninhados como (a+)+ ou (\s*\w+)* fazem o motor tentar um número exponencial de combinações quando a string quase casa mas falha no fim. Em servidor, esse mesmo padrão vira uma vulnerabilidade de negação de serviço (ReDoS).

Posso validar CPF ou e-mail só com regex?

Não de forma confiável. Regex confere o formato, não a validade: um padrão de CPF aceita 111.111.111-11, que é inválido. A validação real exige o cálculo do dígito verificador. Para e-mail, a especificação é complexa demais para uma regex razoável — confira a estrutura básica e confirme enviando uma mensagem.