Lección 5
Flujo de depuración de regex
Fixtures, resaltados, riesgos de backtracking y errores comunes.
El trabajo fiable con regex es orientado a pruebas. Trata los patrones como código: entradas de ejemplo, coincidencias esperadas de salida.
Paso 1: Recopila fixtures representativos
Reúne entradas que deben coincidir y entradas que no deben coincidir:
- Muestras del camino feliz de logs de producción (redacta secretos)
- Casos límite: cadenas vacías, Unicode, espacios extra, campos faltantes
- Falsos positivos conocidos que ya encontraste una vez
Un resaltado verde en una cadena demo no es una suite de pruebas.
Paso 2: Reduce el patrón incrementalmente
Empieza anclado y estricto, luego relaja:
- Coincide un prefijo fijo con
^ - Añade clases de caracteres para segmentos variables
- Añade cuantificadores solo donde la longitud varía de verdad
- Activa
iousolo cuando los requisitos lo exijan
Si el patrón coincide demasiado, aprieta antes de añadir exclusiones con negative lookaheads.
Paso 3: Inspecciona grupos de captura
Para cada coincidencia, verifica que los valores de grupo mapeen a los campos que crees haber parseado. Los bugs de $n desplazados en plantillas de reemplazo son habituales.
Usa la vista previa de reemplazo para confirmar la salida reordenada en cada línea del fixture.
Paso 4: Vigila el backtracking catastrófico
Cuantificadores anidados como (.*)* en entrada grande pueden bloquear motores. Síntomas:
- La pestaña del navegador se cuelga al pegar
- El paso de lint de CI agota el tiempo
Las correcciones incluyen cuantificadores posesivos/perezosos, grupos atómicos (donde haya soporte) o reescribir para evitar sándwiches de .*.
Lista de errores comunes
| Error | Síntoma |
|---|---|
Olvidar g | Solo se resalta la primera línea |
. sin s | JSON multilínea falla |
$ sin escapar en reemplazo | Se inserta $1 literal incorrectamente |
\w para texto internacional | Omite nombres válidos |
| Parsear formatos anidados | Falsos positivos en HTML/JSON |
Conclusión clave
Entrega regex con fixtures, flags documentadas y vista previa de reemplazo en tamaño real de pegado. Cuando crece la complejidad, pasa a un parser — el regex debe ser el bisturí, no el martillo.