O que significa «testar uma expressão regular»?
Testar uma expressão regular («regex test online», «testar regex javascript») consiste em executar um padrão contra um texto real e observar exatamente o que o motor retorna: as strings correspondentes, sua posição e o valor dos grupos de captura. Um padrão que «parece certo» não diz nada enquanto não rodar nos seus dados — é a única diferença que conta entre a regex do tutorial e a regex de produção.
O teste responde a três perguntas distintas. Se dá match : a tabela de correspondências diz na hora. Onde e quantas : o índice e o comprimento mostram se a âncora estava no lugar certo. O que é capturado : os grupos numerados ou nomeados revelam se a parte que você queria extrair é realmente ela.
Os metacaracteres que fazem toda a diferença
O ponto . substitui qualquer caractere exceto a nova linha — daí o flag s quando seu texto é multilinha. Os quantificadores *, + e ? são gulosos : param na primeira contagem de repetições suficiente. O sufixo ? (*?, +?, {2,5}?) inverte esse comportamento e dá a versão preguiçosa, quase sempre a preferível quando um .* devora o fim da linha.
Os colchetes definem uma classe: [abc] aceita um caractere entre os listados, [^abc] tudo exceto eles, [a-z0-9] um intervalo. Atenção à negação no início da classe — [^...] apenas para a primeira posição, senão ^ volta a ser literal. O pipe | separa alternativas e se comporta como uma prioridade baixa: ^cat|dog$ significa «todo o texto vale cat» ou «todo o texto vale dog», não «cat ou dog no início ou no fim» — nesse caso é preciso agrupar: ^(?:cat|dog)$.
Grupos, lookahead e lookbehind
Os parênteses capturam. O grupo 1 é acessível com $1 no lado da substituição e \1 no lado do padrão, os grupos nomeados com $<nom> e \k<nom> — muito mais legível a partir de três grupos. (?:...) agrupa sem criar um número, o que é preferível quando você captura apenas pela estrutura.
As asserções (lookaround) verificam sem consumir: (?=...) exige que o que vem depois corresponda, (?!...) o proíbe, (?<=...) e (?<!...) fazem o mesmo com o que vem antes. É assim que se exige um caractere especial em uma senha sem incluí-lo na captura: ^(?=.*\d)(?=.*[A-Z]).{12,}$.
ReDoS: quando a regex vira uma bomba-relógio
O ReDoS (Regular Expression Denial of Service) vem do backtracking : diante de uma entrada quase conforme, um padrão como (a+)+$ explora todas as formas de cortar os «a» antes de falhar, e o número de explosões cresce exponencialmente. Duas disciplinas: testar o padrão em um volume realista — a aba Desempenho faz isso por você — e nunca executar uma regex não auditada em uma entrada vinda de fora sem limite de tamanho. Em um servidor, uma regex travada congela um worker inteiro até o timeout estourar.
JavaScript, PCRE, Python: as mesmas bases, algumas diferenças
O testador usa o motor nativo do navegador, ou seja, ECMAScript. As sintaxes básicas — classes, quantificadores, grupos, lookahead, flags g i m s u y — são comuns ao PCRE (PHP, Perl), ao Python com re, a Java e a Go. As diferenças estão sobretudo no lookbehind (durante muito tempo ausente no JavaScript, hoje suportado), nas propriedades Unicode e nos flags em linha como (?i), próprios do PCRE. Traduzir um padrão de uma linguagem para outra continua sendo um exercício de detalhe — não de invenção.
Recomendado para
Desenvolvedores front-end e back-end (validação de formulário, parsing de log, migração de dados), ops e DevOps (filtros de configuração, regras WAF), testadores e analistas (extração de colunas, controle de formato), redatores e analistas de dados (limpeza de arquivos), estudantes (entender os metacaracteres) e qualquer pessoa que precise de um testador de expressão regular rápido, completo e confidencial — em complemento, o formatador JSON, ocodificador e decodificador URL, ocodificador e decodificador Base64 e o codificador e decodificador JWT.