Estrategias de golf de regex: cómo superar el par
Siete técnicas para escribir la regex más corta que atrape a todos los objetivos y deje libres a los demás, con tableros interactivos que puedes resolver en el propio artículo.

· 6 min de lectura
/^c.*t/
atrapa
- cart
- chart
- coat
deja libre
- scat
- crab
El golf de regex es un juego sencillo: recibes dos listas de palabras. Escribe la expresión regular más corta que coincida con todo lo de la primera lista (los monstruos) y con nada de la segunda (los inocentes). Cada carácter cuenta, y cada tablero tiene un par: la longitud que hay que superar.
El truco es que el golf de regex no se trata tanto de sintaxis como de ver. Aquí tienes siete hábitos que separan una respuesta de 28 caracteres de una de 5. Todos los ejemplos son interactivos: escribe en los tableros o pulsa Probar para abrir el patrón en la Zona de pruebas.
01Describe la diferencia, no las palabras
El instinto del principiante es describir a los monstruos. El del golfista es encontrar lo más pequeño que solo tienen en común los monstruos.
Tablerocat · cart · chart · coat · cast vs act · arc · tack · scat · crab
- listarlaslo resuelve28
/^(cat|cart|chart|coat|cast)$/ - factorizarlo resuelve20
/^c(a|ar|har|oa|as)t$/ - la diferencialo resuelve5
/^c.*t/
Los cinco monstruos empiezan por c y tienen una t en algún punto después. Ninguno de los inocentes cumple eso. Esa observación vale 23 caracteres.
02Las anclas son el filtro más barato que tienes
^ y $ cuestan un carácter cada una y pueden eliminar grupos enteros de inocentes. Mira lo que pasa si quitamos el ^ de la respuesta anterior:
Dos caracteres de anclas casi siempre salen más baratos que hacer más listo el resto del patrón. Cuando un tablero se divide por posición (cómo empiezan o terminan las palabras), recurre primero a las anclas.
03Busca, no hagas coincidir todo
El golf de regex usa semántica de búsqueda: tu patrón solo tiene que coincidir en algún lugar de la palabra, no con la palabra entera. Así que no hace falta envolverlo todo en ^…$ ni rellenar con .*:
| En vez de | Escribe | Ahorras |
|---|---|---|
^.*ing$ |
ing$ |
3 |
.*foo.* |
foo |
4 |
^(a|b) |
^[ab] |
1 |
Los .* al principio y al final son puro relleno. (El panel de diagnóstico de Regex Hunter los señala justo por eso.)
04Gasta tus caracteres donde cuentan
Muchas funciones de las regex tienen una forma corta y una larga. Los golfistas siempre eligen la corta:
| Larga | Corta | Ahorras |
|---|---|---|
[0-9] |
\d |
3 |
[A-Za-z0-9_] |
\w |
10 |
(a|b|c) |
[abc] |
2 |
.{2} |
.. |
2 |
aa* |
a+ |
1 |
(?:ab)+ |
(ab)+ |
2 |
Los grupos sin captura son buena higiene en código de producción, y caracteres desperdiciados en el golf.
05Deja que las referencias inversas vean los patrones por ti
Cuando los monstruos comparten una forma en lugar de letras concretas (una letra doble, un trozo repetido), una referencia inversa (backreference) hace el trabajo. (.) captura cualquier carácter; \1 exige ese mismo carácter otra vez.
Pruébalo en un tablero. El par es la longitud de ese patrón:
Atrapa las palabras con una letra doble.
Objetivos · 0/5 atrapados
- bookobjetivo
- letterobjetivo
- coffeeobjetivo
- balloonobjetivo
- grassobjetivo
Inocentes · 0 errores
- bakeinocente
- paperinocente
- stoneinocente
- orangeinocente
- tigerinocente
Escribe una regex: el tablero se actualiza mientras escribes.
06Espacio negativo: di lo que no puede estar
A veces a los monstruos los define lo que les falta. Hay dos formas de decir “ninguna e en ninguna parte”, y una es más corta:
Tableromoon · ask · dog · trunk · swift vs tree · eagle · green · apple · code
- lookaheadlo resuelve8
/^(?!.*e)/ - clase negadalo resuelve7
/^[^e]*$/
Los lookaheads se ganan el sueldo cuando necesitas varias condiciones a la vez (“tiene un dígito y ningún espacio”). Para una sola letra ausente, gana la clase negada.
07Cuando no hay nada en común, cubre el conjunto
Algunos tableros no tienen una única regla elegante. Entonces el juego se convierte en un puzzle de cobertura: encuentra unos cuantos fragmentos diminutos (j, bu, a.a) que atrapen cada uno a algunos monstruos y a ningún inocente, y únelos con |. Así funciona exactamente el famoso solucionador de Peter Norvig; lo contamos en El golf de regex de xkcd: el puzzle detrás del cómic 1313.
08Pruébalo
Un tablero más. Los monstruos comparten una estructura, y los inocentes están elegidos para castigar las respuestas obvias: (.)\1 atrapa las palabras equivocadas, y (.).\1 atrapa casi todo. ¿Puedes llegar al par?
Atrapa las palabras que contienen un trozo de dos letras repetido.
Objetivos · 0/5 atrapados
- bananaobjetivo
- papayaobjetivo
- cocoaobjetivo
- dodoobjetivo
- hahaobjetivo
Inocentes · 0 errores
- abbainocente
- llamainocente
- saladinocente
- tattooinocente
- cheeseinocente
Escribe una regex: el tablero se actualiza mientras escribes.
09Sigue jugando
- Cada día hay una caza nueva con un par que superar: juega la de hoy.
- Los packs de práctica agrupan tableros por técnica (anclas, clases, cuantificadores, referencias inversas): empieza por lo básico.
- ¿Te atascas con la sintaxis? La Guía de regex cubre cada elemento, y la Zona de pruebas te deja probar lo que quieras.