Lição 5
Fluxo de depuração de regex
Fixtures, destaques, riscos de backtracking e erros comuns.
Regex confiável é orientada a testes. Trate padrões como código: exemplos entram, matches esperados saem.
Passo 1: Colete fixtures representativas
Reúna inputs que devem casar e inputs que não devem casar:
- Amostras felizes de logs de produção (redija segredos)
- Casos limite: strings vazias, Unicode, espaços extras, campos ausentes
- Falsos positivos conhecidos que você já viu uma vez
Um destaque verde numa string de demo não é suíte de testes.
Passo 2: Estreite o padrão incrementalmente
Comece ancorado e estrito, depois relaxe:
- Case um prefixo fixo com
^ - Adicione classes de caractere para trechos variáveis
- Adicione quantificadores só onde o comprimento realmente varia
- Ligue
iouusó quando o requisito exigir
Se o padrão casa demais, aperte antes de adicionar exclusões com negative lookaheads.
Passo 3: Inspecione grupos de captura
Para cada match, verifique se os valores dos grupos mapeiam aos campos que você acha ter parseado. Bugs off-by-one em $n no replace são comuns.
Use preview de replace para confirmar saída reordenada em cada linha de fixture.
Passo 4: Observe backtracking catastrófico
Quantificadores aninhados como (.*)* em input grande podem travar engines. Sintomas:
- Aba do navegador trava ao colar
- Passo de lint no CI estoura tempo
Correções incluem quantificadores possessivos/lazy, grupos atômicos (onde suportado) ou reescrever para evitar sanduíches de .*.
Checklist de erros comuns
| Erro | Sintoma |
|---|---|
Esqueceu g | Só a primeira linha destaca |
. sem s | JSON multilinha falha |
$ sem escape no replace | $1 literal inserido errado |
\w para texto internacional | Perde nomes válidos |
| Parsear formatos aninhados | Falsos positivos em HTML/JSON |
Conclusão
Entregue regex com fixtures, flags documentadas e preview de replace no tamanho real da colagem. Quando a complexidade crescer, migre para um parser — regex deve ser o bisturi, não o martelo.