iGotTools

Como testar padrões regex

Teste regex no seu navegador. Insira padrão e texto de teste, alterne flags, inspecione correspondências e grupos, e pré-visualize substituições localmente.

As expressões regulares são poderosas precisamente por serem compactas, mas essa mesma compacidade torna fácil errar de forma sutil. Um padrão que parece correto pode corresponder a demais, a de menos, ou a nada, e a única forma fiável de o saber é rodá-lo contra texto real. O testador de regex executa uma expressão regular de JavaScript no seu navegador, mostra cada correspondência com os respetivos grupos de captura e pré-visualiza substituições — tudo sem enviar o seu texto.

TL;DR

Pode desenvolver e verificar uma regex contra entrada real, inteiramente em local.

  • Vê correspondências e grupos — cada correspondência lista o texto, o intervalo de índices e os grupos de captura (incluindo grupos com nome).
  • Pré-visualize substituições — escreva uma substituição e veja o resultado alterado no instante, com aviso quando nada muda.
  • As sete flags do JS — alterne g, i, m, s, u, y ou d e observe o resultado atualizar-se.

O que é regex

Uma expressão regular é um padrão que descreve um conjunto de cadeias. É a ferramenta padrão para procurar, validar, extrair e substituir texto, e está integrada em todas as linguagens de programação. Em JavaScript, uma regex é um objeto RegExp, que você escreve como literal (/\d+/g) ou construindo um (new RegExp("\\d+", "g")).

Os trabalhos habituais da regex:

  • Validação — “esta cadeia parece um email, uma data, um número de telefone?”
  • Extração — “retire cada URL, cada número, cada frase entre aspas deste texto.”
  • Substituição — “troque cada marcador por um valor real” ou “normalize todos os espaços.”

Como a regex é breve e simbólica, um único caractere mal colocado muda o significado. Testar contra entrada representativa é como passa de “acho que funciona” para “funciona”.

As partes de um padrão regex

Um padrão constrói-se com alguns blocos. Conhecê-los pelo nome torna os padrões legíveis:

  • Literais — caracteres ordinários que correspondem a si próprios. cat corresponde às letras c, a, t por ordem.
  • Classes de caracteres — um conjunto de caracteres permitidos entre parênteses retos. [a-z] corresponde a qualquer letra minúscula; \d é a abreviatura de [0-9], \w de caracteres de palavra, . de (quase) qualquer caractere.
  • Quantificadores — quantas vezes o anterior se repete. * é zero ou mais, + um ou mais, ? zero ou um, e {n} ou {n,m} uma contagem exata ou limitada.
  • Âncoras — posição, não caracteres. ^ corresponde ao início da cadeia (ou linha, com a flag m), $ ao fim.
  • Grupos — os parênteses (...) capturam parte da correspondência para a referenciar depois. Os grupos com nome (?<year>\d{4}) dão um nome legível à captura.
  • Alternaçãocat|dog corresponde a cat ou a dog.

Compor estes blocos é como se escrevem os padrões, e vê-los aplicados ao texto é como se verificam.

Flags

As flags modificam o comportamento de todo o padrão e acrescentam-se após a barra de fecho (por exemplo /x/gi). O testador expõe as sete flags de JavaScript como interruptores:

  • g (Global) — procura todas as correspondências, não só a primeira. Sem g, a pesquisa para após o primeiro acerto.
  • i (Ignorar maiúsculas) — torna a correspondência insensível a maiúsculas, de modo que [a-z] também encaixa com maiúsculas.
  • m (Multilinha) — deixa ^ e $ corresponder ao início e ao fim de cada linha, não só de toda a cadeia.
  • s (Ponto tudo) — deixa . corresponder também a mudanças de linha, o que normalmente não faz.
  • u (Unicode) — trata o padrão como pontos de código Unicode, essencial para emojis e alfabetos não ASCII.
  • y (Sticky) — corresponde só em lastIndex, ancorando cada pesquisa numa posição exata.
  • d (Índices) — expõe os índices de início e fim de cada grupo de captura, além dos respetivos valores.

O dia a dia costuma precisar só de g e i; as restantes resolvem casos concretos com texto multilinha, Unicode ou análise avançada.

Passo a passo: testar um padrão

Abra o testador de regex e siga este fluxo.

  1. Insira o seu Padrão no campo Padrao. Escreva-o sem as barras envolventes e sem flags — a ferramenta monta o literal por si.
  2. Cole o seu Texto de teste no campo de texto. É o texto onde o seu padrão procura.
  3. Alterne as Flags de que precisa — g, i, m, s, u, y ou d. O resultado atualiza-se ao alternar.
  4. Consulte o separador Matches. Cada correspondência mostra o texto reconhecido, o intervalo de índices e os grupos de captura eventuais (os grupos com nome aparecem com o nome). Se nada encaixa, verá “Sem matches”.
  5. Mude para o separador Substituir. Escreva uma Substituicao (pode referenciar grupos como $1 ou $<name>). A ferramenta roda text.replace(regex, replacement) e mostra o resultado alterado, ou avisa quando nada muda.
  6. Copie ou redefina. Use Copiar regex para o literal, Copiar resumo para a lista de correspondências, Copiar substituicao para o resultado, ou Redefinir para limpar tudo.

Se não souber por onde começar, o menu Amostra carrega um padrão e texto prontos para Data, Email, URL ou Palavras, para ver logo um exemplo funcional.

Limites e notas específicas do JavaScript

Algumas restrições honestas, para que a ferramenta seja o que espera:

  • Só o motor JavaScript. A ferramenta roda new RegExp(pattern, flags) no seu navegador, pelo que reflete o motor regex de JavaScript — não PCRE, Python nem Java. Padrões escritos para outros motores podem comportar-se de forma diferente, e a ferramenta não “explica” um padrão por si.
  • Tamanhos limitados. O padrão é limitado a 500 caracteres e o texto a 20.000. Se exceder, a ferramenta assinala o problema em vez de rodar.
  • As correspondências limitam-se a 200. Quando um padrão encaixa mais de 200 vezes, a ferramenta mostra as primeiras 200 com o aviso “Mostrando os primeiros 200 matches.”. Para verificar chega; para contar entradas enormes, afine o padrão.
  • O lookbehind varia com o motor e a idade. O lookbehind de JavaScript ((?<=...)) é suportado em navegadores modernos, mas faltava em motores mais antigos e difere do PCRE. Se um lookbehind falhar, é normalmente por isso.

Perguntas frequentes

Suporta PCRE?

Não. A ferramenta usa o motor RegExp de JavaScript (new RegExp(pattern, flags)), que tem a sua própria sintaxe e conjunto de funcionalidades e não é compatível com PCRE. Funcionalidades exclusivas do PCRE — como padrões recursivos ou certas classes POSIX — não funcionam aqui. Escreva padrões para o motor JavaScript, ou converta padrões PCRE antes de os testar.

O que são grupos de captura?

Os parênteses num padrão ( ... ) criam um grupo de captura que memoriza a parte do texto que encaixou, para a referenciar depois — por número ($1, $2) numa substituição, ou por nome se escreveu um grupo com nome (?<name> ...). O separador Matches mostra o valor de cada grupo (e o nome, quando existe), e é assim que confirma que o padrão captura o que pretendia.

Como substituo texto?

Mude para o separador Substituir e escreva uma Substituicao. A ferramenta roda text.replace(regex, replacement) com as suas flags atuais e mostra o resultado; pode referenciar grupos com $1, $2, … ou grupos com nome com $<name>. Se a flag global g estiver desligada, só a primeira correspondência é substituída. Quando nada muda, a ferramenta diz-o claramente.

Porque só 200 correspondências?

Por segurança e velocidade. Um padrão pode corresponder milhares de vezes num documento grande, e mostrar todas abrandaria a página até quase parar. O limite de 200 chega para verificar que um padrão encaixa com o que pensa; se precisar da contagem completa, torne o padrão mais específico ou teste num excerto mais pequeno.

iGotTools

Comece com esta ferramenta

Começar agora