Las expresiones regulares tienen fama de crípticas, pero el 90 % del uso real se reduce a un puñado de patrones que se repiten en cualquier proyecto: validar un email, extraer una URL, limpiar espacios duplicados. El resto es buscar en Google cuando aparece el caso raro.
Prueba antes de pegar en producción
Antes de meter una regex en tu código, pruébala contra varios casos reales — incluidos los que no deberían coincidir — en el probador de expresiones regulares. Te resalta cada coincidencia y los grupos capturados, así ves de inmediato si el patrón es demasiado permisivo o demasiado estricto.
Los patrones que usarás siempre
- Email (validación básica):
^[^\s@]+@[^\s@]+\.[^\s@]+$— no cubre el 100% del RFC, pero es suficiente para formularios. - Solo dígitos:
^\d+$ - Espacios duplicados:
\s{2,}— útil para limpiar texto pegado de un PDF o Word. - URL con protocolo:
^https?:\/\/[^\s]+$ - Fecha ISO (YYYY-MM-DD):
^\d{4}-\d{2}-\d{2}$ - Slug (minúsculas y guiones):
^[a-z0-9]+(-[a-z0-9]+)*$
Los errores más comunes
- Olvidar escapar el punto.
.significa "cualquier carácter", no un punto literal. Para un dominio, es\.no.. - Codicia por defecto.
<.+>sobre<b>negrita</b>captura desde el primer<hasta el último>, no solo una etiqueta. Usa el cuantificador perezoso<.+?>para pararte en el primer cierre. - No anclar el patrón. Sin
^y$, tu regex puede hacer match con una parte de la cadena y dejar pasar basura antes o después. - Confundir
[abc]con(abc). Lo primero es "una de estas tres letras"; lo segundo es "la secuencia exacta abc" como grupo.
Grupos con nombre, tu mejor amigo
Cuando extraes varios valores de una cadena (por ejemplo, partes de una URL o una fecha), usa grupos con nombre en vez de contarlos por posición: (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}). El código que consume el resultado se vuelve mucho más legible que match[1], match[2], match[3].
La chuleta corta: escribe el patrón, pruébalo contra casos límite reales, y solo entonces lo pegas en el código.

