Contenido del curso
Construcción de patrones para parsing avanzado
Regex robustas para entornos de producción
- 8

Cuantificadores codiciosos vs perezosos en regex
08:07 min - 9

Anclas y bordes de palabra: buscar vs validar
08:47 min - 10

Alternancia y paréntesis: domina grupos en regex
Viendo ahora - 11

Grupos nombrados en regex: adiós a los números
07:15 min - 12

Lookahead y lookbehind: cómo validar sin consumir texto
07:40 min - 13

Property escapes y flags para regex Unicode
07:19 min - 14

ReDoS: cómo una regex puede tumbar tu servidor
06:42 min
Alternancia y paréntesis: domina grupos en regex
Resumen
El operador O en regex, representado con la barra vertical o pipe, te deja expresar varias opciones en un mismo patrón. Suena simple, pero trae una trampa de precedencia que confunde a muchos. Aquí verás cómo los paréntesis resuelven ese problema y, de paso, capturan lo que emparejan para reutilizarlo después. Ideal si estás limpiando o transformando texto con expresiones regulares.
¿Cómo funciona la alternancia con la barra vertical en regex?
La alternancia se representa con una barra vertical y te permite listar diferentes opciones dentro de un solo patrón [00:38]. Por ejemplo, la regex gato|perro|pato empareja cualquiera de esos tres textos.
Pero aquí viene lo interesante: el motor evalúa las opciones estrictamente de izquierda a derecha y se queda con la primera que tenga éxito, no con la más larga ni con la mejor [00:57].
Imagina que escribes ham|hamburguesa y aplicas el texto hamburguesa. El motor avanza, ve que la opción ham encaja, se da por satisfecho y termina ahí [01:15]. Jamás llega a evaluar la palabra completa.
¿Por qué mi regex con pipe no captura la palabra completa? Porque el motor toma la primera opción que coincide de izquierda a derecha. Si quieres la más larga, escríbela primero: usa
hamburguesa|hamen vez deham|hamburguesa.
La regla es clara: si tu objetivo es capturar la opción más larga, escríbela siempre al principio.
¿Por qué la barra vertical necesita paréntesis?
Otro error crítico ocurre porque la barra vertical tiene la precedencia más baja de todos los operadores en expresiones regulares [01:44]. Sus operandos son absolutamente todo lo que está a la izquierda y todo lo que está a la derecha.
Por eso una regex como http|https no significa lo que crees. El motor no la lee como un texto que empieza por http o https. La interpreta de forma literal, como dos cosas aisladas:
- Cualquier texto que comienza obligatoriamente con http, sin importar cómo termina.
- Cualquier texto que termina obligatoriamente con https, sin importar cómo comienza.
Para aislar la alternancia entran en juego los paréntesis [02:24]. Ellos actúan como una frontera que delimita el alcance de la barra vertical. Escrito como (http|https), ahora sí significa un texto que empieza por http o por https.
¿Cuándo uso clases de caracteres en vez de alternancia? Si buscas caracteres individuales, las clases son más limpias y veloces: usa
[aeiou]en lugar dea|e|i|o|u. Reserva la alternancia solo para palabras completas, frases o subpatrones complejos.
¿Cómo agrupan y capturan grupos los paréntesis?
Además de delimitar la alternancia, los paréntesis te permiten agrupar caracteres para aplicar un cuantificador a la secuencia entera, no solo a una letra [03:29].
Mira estos dos ejemplos concretos:
(ja){2,5}aplica el rango entre dos y cinco a la secuencia completa, emparejando risas como jaja, jajaja o jajajaja.- Una secuencia de dos dígitos seguida de un espacio, repetida exactamente tres veces, empareja algo como 10, 20, 30 [03:47].
Ahora puedes repetir cualquier secuencia en lugar de un solo carácter o clase. Y aquí aparece la parte más potente: la captura.
Cuando envuelves algo entre paréntesis, el motor guarda en una caja lo que ese grupo emparejó [04:16]. A eso lo llamamos captura. Si lo aplicas a una fecha, el motor segmenta el resultado en carpetas numeradas automáticamente:
- El grupo cero es el match completo.
- El grupo uno toma el año, por ejemplo 2026.
- El grupo dos toma el mes, el 05.
- El grupo tres toma el día, el 13 [04:38].
En la interfaz de Regex101 verás una sección de match information que muestra de forma visual el índice de cada grupo y el texto exacto guardado dentro [04:53].
¿Cómo reutilizo grupos capturados para reemplazar datos?
Con estos conceptos frescos llegan dos técnicas avanzadas. La primera es el reemplazo de datos [05:04].
En operaciones de limpieza de texto puedes invocar el contenido de esas cajas de memoria usando el símbolo de dólar seguido del índice del grupo, por ejemplo $1. Esto te permite reordenar información de forma masiva, como transformar fechas de un formato a otro.
La segunda técnica es back reference o referencia hacia atrás [05:32]. Le exiges al motor que busque exactamente lo mismo que ya capturó en un grupo dentro de la misma regex.
Veamos un caso práctico con un log. Supongamos que quieres aislar todos los niveles de seguridad: error, warn, info [05:47]. Con alternancia básica lo logras, pero queda más limpio si agrupas esa alternancia y escapas los corchetes del inicio y del final para buscarlos tal cual [06:15]. Así se crea el grupo uno con info, warn o error.
¿Cómo cambio el formato de una fecha con grupos en regex? Captura año, mes y día en grupos separados y en el modo substitution referéncialos con dólar. Por ejemplo,
$3/$2/$1reordena una fecha ISO a día, mes y año.
Al pasar del modo match al modo substitution, reformateas las fechas del servidor [06:36]. Usando la regex que ya encapsula los grupos de año, mes y día, escribes en la parte superior algo como $3/$2/$1 y abajo ves el resultado construyéndose en tiempo real [07:32]. Pasaste una fecha en formato ISO a otro formato distinto solo referenciando los grupos.
Un detalle importante para el futuro: los grupos numerados se rompen apenas refactorizas tu patrón [07:58]. Por eso la versión más moderna y mantenible es nombrarlos, algo que da el salto de buscar datos a producirlos.
¿Te ha pasado que una regex con pipe capturó menos de lo que esperabas? Cuéntame en los comentarios cómo la resolviste.