Una expresión regular (regex) es una forma compacta de describir un patrón de texto: no una cadena concreta, sino una regla que una cadena debe cumplir. En vez de recorrer caracteres en un bucle, se puede comprobar o buscar una estructura compleja con una sola expresión.
Bloques básicos
- Clases de caracteres —
\d(dígito),\w(letra/dígito/guion bajo),\s(espacio en blanco), o una clase propia como[a-zA-Z]. - Cuantificadores —
*(0 o más),+(1 o más),?(0 o 1),{2,5}(de 2 a 5 veces). - Grupos de captura — los paréntesis
(...)marcan una parte de la coincidencia que luego se puede usar por separado, por ejemplo en un reemplazo. - Anclas —
^y$fijan un patrón al inicio o al final de una línea.
Por qué \w falla con "mañana"
En el motor de expresiones regulares de JavaScript que usa esta herramienta, \w equivale siempre a [A-Za-z0-9_]: solo letras sin tilde, dígitos y guion bajo. Por eso /^\w+$/.test('mañana') da false — la eñe rompe la coincidencia — y activar el flag u no cambia nada, porque en JS (a diferencia de Python) \w no se vuelve consciente de Unicode con ningún flag. La forma correcta de capturar "mañana" o "café" completos es /^\p{L}+$/u, la clase de propiedad Unicode que reconoce cualquier letra de cualquier alfabeto.
Coincidencia voraz frente a perezosa
Por defecto, los cuantificadores son «voraces»: intentan capturar tantos caracteres como sea posible, y solo ceden si eso impide encontrar una coincidencia. Por ejemplo, <.+> sobre <a>texto</a> capturaría todo desde el primer < hasta el último >. Añadir ? después de un cuantificador (<.+?>) lo hace «perezoso»: captura lo mínimo posible, deteniéndose en la primera coincidencia válida.
Para qué sirve
- Validar el formato de datos de entrada (email, número de teléfono, código postal).
- Buscar y reemplazar texto en masa según un patrón, no una coincidencia exacta.
- Extraer datos estructurados de logs o de texto sin estructurar.
Backtracking catastrófico
Cuantificadores anidados como (a+)+ pueden, con ciertas cadenas de entrada, obligar al motor de regex a probar una cantidad exponencial de combinaciones antes de concluir que no hay coincidencia — la página o el servidor se «cuelgan» con una expresión aparentemente simple. Es una vulnerabilidad real (ReDoS), así que los cuantificadores anidados complejos conviene probarlos con cadenas largas «casi coincidentes», no solo con los ejemplos esperados.