Testador de regex
Digite um padrão e um texto — as correspondências são destacadas ao vivo, com os grupos de captura listados abaixo.
Construindo um padrão pedaço por pedaço
O caminho mais rápido para uma expressão regular funcional é constrangedoramente pouco glamouroso: comece digitando o texto literal que você quer encontrar, observe-o destacado, e só então generalize passo a passo — troque os dígitos por uma classe como [0-9]+, permita partes opcionais com um ponto de interrogação, ancore com ^ ou $ assim que o meio estiver se comportando bem. Como as correspondências são atualizadas ao vivo enquanto você digita, cada pequena mudança te dá um retorno instantâneo, e um erro aparece no momento em que você o comete, em vez de três edições depois. Igualmente importante é o que você cola na caixa de texto: inclua linhas que o padrão não deveria corresponder, não só as que deveria. Um padrão testado só com exemplos favoráveis tem o hábito de corresponder a metade do documento no momento em que encontra dados reais.
Grupos de captura fazem a extração
Envolva parte de um padrão em parênteses e ele vira um grupo de captura — o pedaço de cada correspondência que você realmente quer guardar. Um padrão como ([0-9]{2}):([0-9]{2}) rodado sobre uma página de texto não encontra só horários; a tabela abaixo do texto lista cada correspondência, com o grupo um guardando as horas e o grupo dois os minutos, além da posição onde foi encontrada. Adicione a flag g e você coleta todas as ocorrências no texto, em vez de parar na primeira. Este é o núcleo honesto da maior parte do trabalho cotidiano com regex: não uma validação sofisticada, mas extrair valores estruturados — datas, números de pedido, preços — de um texto que nunca foi feito para ser estruturado.
Quando um padrão trava — e a rede de segurança
Alguns padrões são armadilhas. Aninhe um quantificador aberto dentro de outro — a forma clássica é (a+)+ — e, com a entrada errada, o mecanismo tenta um número exponencial de formas de dividir o texto antes de desistir. Na maioria dos sites, isso congela a aba inteira; aqui, a correspondência roda em um worker em segundo plano que é interrompido depois de dois segundos, então você recebe uma explicação em vez de uma página morta. A cura é quase sempre tornar o padrão mais específico, para que o mecanismo tenha menos formas de recortar o mesmo texto. Uma ressalva honesta: este testador usa o mecanismo do JavaScript, o que é ideal se o padrão se destina a um script ou a uma página web, mas Python e PCRE diferem em algumas construções — teste também na linguagem final. Quando os valores que você extrai se destinam a um link ou a uma query string, o codificador de URL é a parada natural seguinte.
Como este testador funciona
Seu padrão é executado contra o texto usando o próprio mecanismo de expressões regulares do JavaScript — o mesmo que o seu código realmente vai usar, caso seja para um script ou uma página web. As correspondências são destacadas no texto e listadas com os seus grupos de captura abaixo.
Quais flags são suportadas?
g (global — encontra todas as correspondências, não só a primeira), i (sem diferenciação entre maiúsculas e minúsculas) e m (multilinha, para que ^ e $ correspondam a limites de linha) — as que você vai usar na prática.
Por que meu padrão mostra um erro?
A sintaxe de regex do JavaScript tem algumas diferenças em relação a outras linguagens (PCRE, Python) — um caractere especial sem escape ou uma construção não suportada gera um erro de sintaxe, mostrado diretamente em vez de um resultado errado silencioso.
Meu texto é enviado para algum lugar?
Não — a correspondência acontece inteiramente no seu navegador, com JavaScript puro. Nada é enviado.
