Patrones de regex que todo desarrollador debería dominar
Las expresiones regulares (regex) son una de las herramientas más poderosas en el kit de herramientas de un desarrollador. Te permiten buscar, validar y transformar texto con patrones concisos que requerirían docenas de líneas de código procedural. Aunque la sintaxis del regex puede parecer críptica a primera vista, dominar un conjunto central de patrones cubre la gran mayoría de los casos de uso del mundo real. Esta guía presenta los patrones regex que usarás repetidamente, con explicaciones detalladas de cómo funciona cada uno.
Repaso de fundamentos de regex
Antes de profundizar en patrones específicos, aquí hay un repaso rápido de los metacaracteres fundamentales que forman la base de todos los patrones regex:
| Metacarácter | Significado | Ejemplo |
|---|---|---|
| . | Cualquier carácter simple | a.c coincide con abc, a1c, a c |
| * | Cero o más del carácter anterior | ab*c coincide con ac, abc, abbc |
| + | Uno o más del carácter anterior | ab+c coincide con abc, abbc |
| ? | Cero o uno del carácter anterior | colou?r coincide con color, colour |
| ^ | Inicio de cadena | ^Hello coincide con Hello al inicio |
| $ | Fin de cadena | world$ coincide con world al final |
| [] | Clases de caracteres | [aeiou] coincide con cualquier vocal |
| () | Grupo de captura | (ab)+ coincide con ab, abab |
| | | Alternancia (OR) | cat|dog coincide con cat o dog |
| \d | Dígito [0-9] | \d{3} coincide con 123 |
| \w | Carácter de palabra [a-zA-Z0-9_] | \w+ coincide con hello_123 |
| \s | Carácter de espacio en blanco | a\sb coincide con a b |
1. Validación de correo electrónico
Patrón básico de correo electrónico
Este patrón valida la estructura básica de una dirección de correo electrónico: uno o más caracteres permitidos antes del @, seguido de un nombre de dominio que contiene al menos un punto, y un dominio de nivel superior de dos o más letras. Captura la mayoría de los formatos inválidos mientras permite direcciones legítimas.
Coincide: user@example.com, john.doe+tag@company.co.uk
No coincide: user@, @example.com, user@.com
2. Validación de URL
Patrón de URL HTTP/HTTPS
Este patrón coincide con URLs HTTP y HTTPS con prefijo www opcional, incluyendo el nombre de dominio y la ruta opcional. La s? hace que la "s" en https sea opcional, y (www\.)? hace que el prefijo www sea opcional. El segmento de ruta (\/[^\s]*)? permite cualquier carácter excepto espacio en blanco después del nombre de dominio.
Coincide: https://example.com, http://www.example.com/path/to/page
No coincide: ftp://example.com, example.com (sin protocolo)
3. Validación de número de teléfono
Número de teléfono internacional
Este patrón sigue el formato de número de teléfono internacional E.164. Permite un prefijo + opcional, requiere que el primer dígito sea 1-9 (sin ceros a la izquierda) y permite hasta 15 dígitos en total. Este es el formato más confiable para almacenar y validar números de teléfono internacionalmente.
Coincide: +14155552671, 442071838750
No coincide: +01xxxxxxxxx, 123
4. Fortaleza de contraseña
Patrón de contraseña fuerte
Este patrón aplica una política de contraseña fuerte: al menos 8 caracteres, conteniendo al menos una minúscula, una mayúscula, un dígito y un carácter especial. La sintaxis (?=.*[...]) usa lookahead positivo para verificar la presencia de cada tipo de carácter sin consumir caracteres.
Coincide: MyP@ss1word, Str0ng!Pass
No coincide: password, Password1, P@ss
5. Validación de dirección IP
Dirección IPv4
Este patrón valida direcciones IPv4 con verificación adecuada de rango. Cada octeto debe estar entre 0 y 255. El patrón usa alternancia para coincidir con: 250-255 (25[0-5]), 200-249 (2[0-4]\d) o 0-199 ([01]?\d\d?). Esto se repite tres veces después de puntos, luego una vez más para el octeto final.
Coincide: 192.168.1.1, 10.0.0.1, 255.255.255.0
No coincide: 256.1.1.1, 192.168.1, 192.168.1.1.1
6. Validación de formato de fecha
YYYY-MM-DD (ISO 8601)
Este patrón valida fechas en formato ISO 8601 (YYYY-MM-DD). Comprueba año de cuatro dígitos, mes entre 01-12 y día entre 01-31. Ten en cuenta que este patrón valida el formato pero no la validez lógica de la fecha (por ejemplo, permite 2026-02-31). Para validación completa, analiza la fecha y verifica programáticamente.
Coincide: 2026-05-20, 2025-01-01, 2024-12-31
No coincide: 2026-5-20, 2026-13-01, 26-05-20
7. Código de color hexadecimal
Color hexadecimal CSS
Este patrón coincide con códigos de color hexadecimal CSS, incluyendo el formato abreviado de 3 dígitos (#fff) y el completo de 6 dígitos (#ffffff). El cuantificador {1,2} permite 1 o 2 repeticiones del grupo de dígitos hexadecimales de 3, soportando ambos formatos.
Coincide: #fff, #FF5733, #1e293b
No coincide: fff, #ff, #1234567
8. Slug / Cadena segura para URL
Patrón de slug de URL
Este patrón valida slugs de URL: cadenas alfanuméricas en minúsculas separadas por guiones. Asegura que no haya guiones al inicio o al final, ni guiones consecutivos. Este formato es amigable para SEO y seguro para su uso en URLs, nombres de archivo e identificadores.
Coincide: my-blog-post, regex-patterns-guide, tool123
No coincide: My-Post, -slug, slug-, my--post
9. Número de tarjeta de crédito
Patrón de tarjeta de crédito común
Este patrón valida los principales números de tarjeta de crédito: Visa (comienza con 4, 13 o 16 dígitos), Mastercard (comienza con 51-55, 16 dígitos), American Express (comienza con 34 o 37, 15 dígitos) y Discover (comienza con 6011 o 65, 16 dígitos). Combínalo con el algoritmo de Luhn para una validación completa.
10. Coincidencia de etiquetas HTML
Extracción de etiquetas HTML
Este patrón coincide con etiquetas HTML de apertura y cierre con contenido. El primer grupo de captura ([a-z][a-z0-9]*) captura el nombre de la etiqueta, y la referencia inversa asegura que la etiqueta de cierre coincida con la de apertura. (.*?) usa coincidencia perezosa para capturar el contenido entre etiquetas para la coincidencia más corta.
Consejos para escribir mejores regex
- Comienza simple: Escribe la versión más básica del patrón primero, luego añade complejidad gradualmente. Prueba en cada paso.
- Usa clases de caracteres: [a-z] es más limpio que (a|b|c|...|z). Las clases nombradas como \d, \w y \s mejoran la legibilidad.
- Prefiere cuantificadores perezosos: Cuando necesites la coincidencia más corta, usa *? y +? en lugar de * y + para evitar la sobrecoincidencia codiciosa.
- Usa anclas: Los patrones de validación siempre deben usar ^ y $ para asegurar que toda la cadena coincida, no solo una subcadena.
- Evita el backtracking catastrófico: Los cuantificadores anidados como (a+)+ pueden causar complejidad temporal exponencial para ciertas entradas. Usa grupos atómicos o cuantificadores posesivos cuando estén disponibles.
- Comenta patrones complejos: Usa el indicador x (modo verboso) para añadir espacios en blanco y comentarios a patrones complejos.
¿Quieres probar estos patrones regex de forma interactiva? Prueba nuestra herramienta gratuita de prueba de regex, que soporta coincidencia en tiempo real, visualización de grupos de captura y explicación de patrones.
Probar expresiones regularesPreguntas frecuentes
¿Qué es un patrón regex?
Un patrón regex es una secuencia de caracteres que define un patrón de búsqueda. Se utiliza para coincidencia de cadenas, validación, operaciones de búsqueda y reemplazo, y análisis de texto. Los patrones regex usan metacaracteres especiales como ., *, +, ?, [], () y {} para definir reglas de coincidencia flexibles.
¿Debería usar regex para validar correos electrónicos?
Usa regex para la validación básica del formato de correo electrónico (verificando el símbolo @, estructura del dominio), pero no intentes validar completamente las direcciones de correo electrónico solo con regex. La especificación de correo electrónico (RFC 5322) es extremadamente compleja, y ningún regex puede validar perfectamente todas las direcciones válidas. En producción, combina la validación regex básica con la verificación real de correo electrónico (enviando un enlace de confirmación).
¿Cuál es la diferencia entre cuantificadores codiciosos y perezosos?
Los cuantificadores codiciosos (*, +) coinciden con la mayor cantidad de texto posible, mientras que los cuantificadores perezosos (*?, +?) coinciden con la menor cantidad posible. Por ejemplo, aplicado a "aabb", el patrón codicioso a.*b coincide con "aabb" (toda la cadena), mientras que el patrón perezoso a.*?b solo coincide con "aab" (la coincidencia más corta).
¿Cómo probar patrones de expresiones regulares?
Usa herramientas de prueba de regex en línea como el probador de regex de ToolHub para probar patrones de forma interactiva. Estas herramientas resaltan coincidencias en tiempo real, muestran grupos de captura y explican qué hace cada parte del patrón.
¿Es el regex igual en diferentes lenguajes de programación?
La mayoría de la sintaxis regex se comparte entre lenguajes, pero las características avanzadas difieren. JavaScript no soportaba aserciones lookbehind en motores más antiguos, Python usa una sintaxis de grupos nombrados diferente a JavaScript, y PCRE (PHP) soporta más características que la mayoría de los otros motores. Siempre prueba tus patrones en tu lenguaje objetivo.