Testador de expressões regulares

Teste expressões regulares localmente e veja correspondências, grupos e posições.

O formulário interativo fica disponível quando o JavaScript está ativo.

Como usar

Digite uma expressão regular JavaScript sem as barras delimitadoras, adicione as flags e cole o texto a ser pesquisado. O resultado lista cada correspondência com seu número, a posição em que começa e o texto de cada grupo de captura; um grupo que não participou da correspondência aparece como —. Você digita o padrão como faria entre as barras no código: uma única barra invertida, como em \d, e não duas.

As flags mudam a forma como o padrão é aplicado: g encontra todas as correspondências em vez de só a primeira, i ignora a diferença entre maiúsculas e minúsculas, m faz ^ e $ corresponderem ao início e ao fim de cada linha, s permite que o ponto corresponda a quebras de linha, u ativa a correspondência Unicode completa, v é uma forma aprimorada de u que adiciona operações de conjunto às classes de caracteres (use u ou v, não os dois), y (sticky) só encontra correspondências no início do texto ou exatamente onde a correspondência anterior terminou, e d registra o início e o fim de cada grupo (a ferramenta não os exibe). Sem g (ou y), só a primeira correspondência é mostrada.

As posições contam a partir de 0 e são medidas em unidades de código UTF-16, do mesmo jeito que o JavaScript conta o comprimento de uma string, então um emoji normalmente conta como dois. Grupos nomeados como (?<year>\d{4}) são listados por número, na ordem em que os seus parênteses de abertura aparecem.

A busca roda em um worker separado e para depois de meio segundo. Um padrão com repetições aninhadas como ^(a+)+$ pode levar um tempo exponencialmente maior em um texto que quase corresponde, o que é conhecido como backtracking catastrófico; em vez de travar a página, a ferramenta interrompe a busca e informa: “A expressão demorou demais para ser avaliada.” Só as 200 primeiras correspondências são listadas e contadas, o padrão pode ter até 500 caracteres e o texto, até 100.000 caracteres.

O mecanismo é o do seu navegador. Os padrões normalmente funcionam em outras linguagens, mas nem sempre: o Python escreve grupos nomeados como (?P<name>…), PCRE e Java têm quantificadores possessivos e grupos atômicos que o JavaScript não tem, e uma flag (?i) no início do padrão não é válida em JavaScript (navegadores recentes só aceitam a forma com escopo (?i:…)). Teste na linguagem de destino antes de confiar em um padrão nela.

Exemplo

Encontra duas correspondências semelhantes a emails. O resultado mostra o texto, a posição inicial e os grupos capturados.

  • \b[a-z]+@([a-z0-9-]+\.)+[a-z]{2,}\b · flags: giNo texto de exemplo: [email protected] na posição 9 e [email protected] na 35. O grupo 1 guarda a última repetição do seu grupo, example. e ntools., e não o domínio inteiro.
  • ^(?<key>[^=]+)=(?<value>.*)$ · flags: gmNas linhas name=Ana e city=Porto: duas correspondências, com os grupos name e Ana, depois city e Porto. Sem m não há correspondência, porque ^ e $ passam a se referir ao texto inteiro.
  • (\d{4})-(\d{2})-(\d{2}) · flag: gEm 2026-10-02 e 2027-03-01: duas correspondências, cada uma dividida em ano, mês e dia.
  • colou?r · flags: giEncontra tanto Color quanto colour: o ? torna o u opcional, e i ignora o C maiúsculo.

Perguntas frequentes

As expressões são compatíveis com todas as linguagens?

Não. Elas usam o mecanismo RegExp do JavaScript; recursos e regras de escape podem ser diferentes em Python, PHP, Java ou outros mecanismos.

Por que meu padrão encontra só uma correspondência?

Adicione a flag g. Sem ela, uma expressão regular para na primeira correspondência.

Por que ^ e $ não correspondem em cada linha?

Por padrão, eles indicam o início e o fim do texto inteiro. A flag m faz com que funcionem linha por linha.

O que significa a mensagem “A expressão demorou demais para ser avaliada”?

A busca levou mais de meio segundo, normalmente por causa de repetições aninhadas como (a+)+ ou (.*)*. Torne as partes repetidas mais específicas, por exemplo [^,]* em vez de .*, para que o mecanismo tenha menos maneiras de tentar uma correspondência.

Ferramentas relacionadas