Pular para o conteúdo
BassoHub
Ferramentas

Testador de regex

Teste regex JavaScript com destaque ao vivo, grupos nomeados, flags e prévia de substituição. Padrões prontos para CPF, CEP e e-mail. Grátis, no navegador.

Testador de expressões regulares (JavaScript)

Sintaxe do JavaScript. Colou um literal como /abc/gi? Padrão e flags são separados sozinhos.

Flags
O que cada flag faz?
g
Global: Encontra todas as ocorrências, não só a primeira.
i
Ignorar caixa: Maiúsculas e minúsculas contam como iguais.
m
Multilinha: ^ e $ passam a valer no início e no fim de cada linha.
s
Ponto pega tudo: O ponto (.) também casa com quebra de linha.
u
Unicode: Emoji conta como um caractere só e libera as classes \p (ex.: letras de qualquer idioma).
v
Unicode sets: Unicode com operações de conjunto dentro das classes (ES2024). Não combina com u.
y
Fixa (sticky): Só casa exatamente na posição atual, sem pular texto.
d
Índices: Informa onde começa e termina cada grupo.
148 caracteres
  • $1 grupo 1
  • $<nome> grupo nomeado
  • $& correspondência inteira
  • $$ cifrão literal

Tudo roda no seu navegador: nada do que você digita é enviado ou guardado.

Usa o motor de regex do JavaScript do seu navegador (o mesmo do Node.js). PCRE, Python e Java têm diferenças de sintaxe: teste no ambiente onde a regex vai rodar.

Como usar

Digite o padrão no primeiro campo, sem as barras: a ferramenta mostra o literal completo, como /\d+/g, e você pode copiá-lo pronto para o código. Se colar um literal inteiro (/abc/gi), padrão e flags são separados sozinhos. Marque as flags, cole o texto de teste e as correspondências acendem na hora, em duas cores alternadas para dar para ver onde uma termina e a próxima começa. Abaixo vem a lista de cada correspondência com a posição no texto e o valor de cada grupo.

Ligue Pré-visualizar substituição para ver o resultado de texto.replace(regex, substituto) antes de levar para o código. Sem ideia por onde começar? Abra os padrões prontos (CEP, CPF, CNPJ, telefone, e-mail, URL, data, IPv4, cor hexadecimal, slug): cada um carrega um texto com exemplos válidos e inválidos, um por linha, e só os válidos acendem.

O que é uma expressão regular

Uma expressão regular (regex) é um padrão que descreve um conjunto de textos. \d{5}-\d{3} quer dizer "cinco dígitos, um hífen e mais três": é o formato do CEP. Com regex você encontra (todas as datas de um documento), valida (este campo parece um e-mail?), extrai (o ano de cada data) e substitui (trocar dd/mm/aaaa por aaaa-mm-dd). A sintaxe tem dialetos; esta ferramenta usa a do JavaScript, a mesma do navegador e do Node.js.

As flags do JavaScript

  • g (global): encontra todas as ocorrências. Sem ela, só a primeira.
  • i (ignorar caixa): /brasil/i casa com "Brasil" e "BRASIL".
  • m (multilinha): ^ e $ passam a valer no começo e no fim de cada linha, não só do texto inteiro.
  • s (dotAll): o ponto passa a casar também com a quebra de linha.
  • u (unicode): emoji e outros caracteres fora do básico contam como um só, e libera as classes \p{...}, como \p{L} (qualquer letra, de qualquer idioma).
  • v (unicode sets): a evolução do u (ES2024), com operações de conjunto dentro das classes, como [\p{L}--[a-z]]. Não dá para usar junto com u.
  • y (sticky): só casa exatamente na posição atual, sem pular texto. Útil para escrever analisadores (tokenizers).
  • d (índices): informa onde começa e termina cada grupo; a ferramenta mostra essas posições ao lado de cada grupo.

Grupos, grupos nomeados e substituição

Parênteses criam grupos de captura: em (\d{2})/(\d{2})/(\d{4}), o dia é o grupo 1, o mês o 2 e o ano o 3. Com nome fica mais legível: (?<dia>\d{2})/(?<mes>\d{2})/(?<ano>\d{4}). Na substituição, $1 insere o grupo 1, $<ano> o grupo nomeado, $& a correspondência inteira e $$ um cifrão literal. Assim, o substituto $<ano>-$<mes>-$<dia> transforma "04/11/2026" em "2026-11-04". Quando você só quer agrupar, sem capturar, use (?:...).

Lookarounds: olhar sem consumir

Lookarounds testam o que vem antes ou depois sem incluir no resultado. \d+(?= reais) pega o número em "150 reais", mas não a palavra. (?<!R\$ )\b\d+ pega números que não vêm depois de "R$ ". São quatro: (?=...) seguido de, (?!...) não seguido de, (?<=...) precedido de e (?<!...) não precedido de.

Por que algumas regex travam (backtracking catastrófico)

O motor de regex do JavaScript testa caminhos e, quando um falha, volta atrás e tenta outro. Em padrões com quantificadores aninhados, como ^(a+)+$, o número de caminhos explode: contra "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!" (30 letras e um ponto de exclamação no fim) o motor tenta todas as formas de dividir as 30 letras entre os grupos antes de desistir: mais de 500 milhões de combinações. Cada letra a mais dobra o tempo. Em servidores isso vira o ataque conhecido como ReDoS; em 2019, uma única regra de firewall com esse problema derrubou boa parte da Cloudflare por quase meia hora.

Como evitar:

  • Não aninhe quantificadores sobre a mesma coisa: (a+)+ é igual a a+.
  • Deixe as alternativas mutuamente exclusivas: (a|aa)* é perigoso (as duas alternativas casam o mesmo texto), a* não.
  • Prefira classes específicas a .*: "[^"]*" em vez de ".*".
  • Limite repetições ({1,64}) e o tamanho da entrada antes de aplicar a regex.

Aqui você pode testar sem medo: a regex roda num Web Worker, fora da página. Se passar de 1 segundo, é interrompida e a ferramenta avisa que provavelmente é backtracking catastrófico.

Regex não valida CPF (só o formato)

O padrão de CPF da colinha confere o formato (11 dígitos, com ou sem pontuação), mas um CPF de verdade tem dois dígitos verificadores, calculados com módulo 11 a partir dos nove primeiros. Isso é aritmética, e regex não faz conta: "123.456.789-00" passa no formato e é inválido. Sequências repetidas, como "111.111.111-11", passam até no cálculo e são recusadas por convenção. Use a regex para formatar e filtrar, e uma função de verificação para validar. O mesmo vale para o CNPJ, inclusive o alfanumérico, emitido a partir de julho de 2026, e para datas: 31/02/2026 tem o formato certo e não existe.

Como a ferramenta funciona

Tudo roda no seu navegador, com o motor de regex dele (V8 no Chrome e no Android, JavaScriptCore no Safari e no iPhone, SpiderMonkey no Firefox). Nada do que você digita é enviado ou guardado. A busca roda em segundo plano com limite de tempo e de 1.000 correspondências; o erro de sintaxe aparece na hora, com a mensagem do próprio motor. Recursos muito novos, como a flag v, dependem da versão do navegador.

Perguntas frequentes

Funciona igual em Python, PHP ou Java? Quase. O básico é igual, mas há diferenças: Python usa (?P<nome>...) para grupo nomeado, PHP (PCRE) e Java têm quantificadores possessivos e a flag x, e o JavaScript não tem \A nem \Z. Teste no ambiente onde a regex vai rodar.

Preciso escapar a barra? Só dentro de um literal (/a\/b/). Com new RegExp("a/b") não precisa. O botão Copiar regex já entrega o literal com as barras escapadas.

Qual a diferença entre .* e .*?? O primeiro é guloso: pega o máximo possível e depois devolve. O segundo é preguiçoso: pega o mínimo. Em <b>um</b> e <b>dois</b>, <b>.*</b> casa a frase inteira, e <b>.*?</b> casa cada negrito.

Por que \w não pega "ç" nem "ã"? No JavaScript, \w é só [A-Za-z0-9_]. Para letras com acento, use \p{L} com a flag u.

Por que regex.test() alterna entre verdadeiro e falso? Com a flag g (ou y), a regex guarda a posição da última busca em lastIndex e continua dali na próxima chamada. Para só validar, tire o g.