¿Qué es exactamente un regex, y para qué sirve en el día a día?
\d{4} significa «cuatro dígitos seguidos». Se usa sobre todo para validar formularios (email, teléfono, tarjeta), buscar y reemplazar texto, y extraer datos de bloques largos.La mayoría de los desarrolladores se topan con regex al validar un campo de formulario: «¿este texto parece un email?», «¿este número tiene el formato de un teléfono?». La sintaxis es densa —combina letras, símbolos y llaves— y por eso conviene probar el patrón contra ejemplos reales antes de confiar en él, en vez de asumir que «se ve bien».
Un patrón habitual de validación de email es ^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$. Busca letras, dígitos, guion bajo, punto, más o guion antes de la arroba, un nombre de dominio, y una extensión de al menos dos letras. No es un regex 100% conforme con el estándar RFC 5322 —eso sería mucho más largo y complejo— pero cubre la inmensa mayoría de los casos reales de un formulario de contacto.
g (global, encuentra todas las coincidencias, no solo la primera), i (ignora mayúsculas/minúsculas), m (multilínea, ^/$ por cada línea), s (el punto también captura saltos de línea), u (modo unicode).¿Cómo funcionan los grupos de captura?
(abc), es un grupo de captura: hace que esa parte de la coincidencia quede disponible por separado, numerada o con nombre.Por ejemplo, el patrón (\d{2})-(\d{2}) aplicado al texto «12-34» produce grupo 1 = «12» y grupo 2 = «34». Puedes nombrar un grupo con (?<nombre>...) para acceder a él después por nombre en vez de por número, lo que hace el código mucho más legible cuando el patrón tiene varios grupos. Si solo quieres agrupar sin capturar (por ejemplo para aplicar un cuantificador a varios caracteres a la vez), usa (?:...).
Tabla de ejemplo —resultado hipotético de aplicar (\d{4})-(\d{2})-(\d{2}) sobre distintas fechas de prueba (valores de ejemplo, no datos reales):
| Texto de entrada | Grupo 1 (año) | Grupo 2 (mes) | Grupo 3 (día) |
|---|---|---|---|
| 2026-07-29 | 2026 | 07 | 29 |
| 1999-12-31 | 1999 | 12 | 31 |
| 2032-01-05 | 2032 | 01 | 05 |
¿Cómo se hace un buscar-reemplazar con regex?
$1, $2… o con $<nombre> para grupos con nombre.Un ejemplo práctico: aplicando el patrón (\d{4})-(\d{2})-(\d{2}) con el reemplazo $2/$3/$1, el texto «2026-07-29» se convierte en «07/29/2026» —útil para convertir un formato de fecha ISO al formato que espera un lector humano en un informe. Si la bandera g no está activada, solo se sustituye la primera coincidencia del texto, algo que sorprende a mucha gente la primera vez que lo prueba.
Otro caso de uso frecuente es enmascarar datos sensibles antes de pegarlos en un ticket de soporte: sustituir cualquier email por [OCULTO], por ejemplo, usando el mismo patrón de validación de email como base para la búsqueda.
Errores comunes al escribir un regex de validación
. en vez de \.), lo que hace que el patrón acepte cualquier carácter donde debería exigir exactamente un punto.Otros fallos típicos: olvidar los anclajes ^ y $ (el patrón entonces coincide con una parte del texto, no con la cadena completa, y puede «aprobar» entradas con basura al principio o al final); confundir un regex de formato con una validación real —por ejemplo, un patrón de tarjeta bancaria como ^\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}$ solo comprueba que hay 16 dígitos agrupados de cuatro en cuatro, no que el número sea válido según el algoritmo de Luhn—; y no probar el patrón contra casos límite (cadena vacía, espacios extra, mayúsculas inesperadas) antes de usarlo en producción.