Expresiones regulares: buscar patrones en texto
La sintaxis básica de las regex con ejemplos para buscar, validar y extraer datos de un texto.
Una expresión regular (regex) es un patrón que describe un tipo de texto: «tres letras seguidas de cuatro números», «cualquier cosa que parezca una fecha», «líneas que empiezan por ERROR». Sirven para buscar, validar, extraer y reemplazar texto, y funcionan casi igual en JavaScript, Python, Java, editores como VS Code y herramientas de terminal. Puedes probar todos los ejemplos de esta guía en nuestro probador de expresiones regulares, que marca las coincidencias en tu navegador.
Los símbolos básicos
| Símbolo | Significa | Ejemplo |
|---|---|---|
. |
Cualquier carácter (salvo salto de línea) | c.sa → casa, cosa |
\d |
Un dígito | \d\d → 42 |
\w |
Letra, dígito o guion bajo (sin ñ ni tildes en muchos lenguajes) | \w+ → hola_1 |
\s |
Espacio, tabulador o salto de línea | a\sb → «a b» |
[abc] |
Uno de esos caracteres | [aeiou] → una vocal |
[^abc] |
Cualquiera menos esos | [^0-9] → no dígito |
^ y $ |
Inicio y final del texto (o de la línea) | ^Hola |
\ |
Escapa un símbolo especial | \. → un punto de verdad |

Cuantificadores: cuántas veces
| Cuantificador | Significa |
|---|---|
* |
0 o más veces |
+ |
1 o más veces |
? |
0 o 1 vez (opcional) |
{3} |
Exactamente 3 veces |
{2,5} |
Entre 2 y 5 veces |
Por defecto son codiciosos: cogen todo lo que pueden. Con <.+> sobre <b>hola</b> obtienes el texto entero, no solo <b>. Añadir ? los vuelve perezosos: <.+?> se detiene en el primer >.
Grupos y alternativas
( … )agrupa y captura lo que coincide, para extraerlo después.|significa «o»:gato|perro.(?: … )agrupa sin capturar.
Por ejemplo, (\d{2})/(\d{2})/(\d{4}) encuentra fechas como 25/10/2026 y captura día, mes y año por separado.
Ejemplos en JavaScript y Python
Extraer todas las fechas de un texto:
const texto = "Examen el 12/11/2026 y entrega el 03/12/2026";
const fechas = [...texto.matchAll(/(\d{2})\/(\d{2})\/(\d{4})/g)];
for (const [completa, dia, mes, anio] of fechas) {
console.log(completa, "→ año", anio);
}
import re
texto = "Examen el 12/11/2026 y entrega el 03/12/2026"
for dia, mes, anio in re.findall(r"(\d{2})/(\d{2})/(\d{4})", texto):
print(dia, mes, anio)
# Reemplazar: pasar a formato año-mes-día
print(re.sub(r"(\d{2})/(\d{2})/(\d{4})", r"\3-\2-\1", texto))
En Python escribe los patrones con r"..." (cadena raw): así \d no se confunde con una secuencia de escape de Python. En JavaScript la g final significa «todas las coincidencias» e i, «sin distinguir mayúsculas».

Validar formatos (con cabeza)
Para validar que un texto completo cumple el formato, ancla el patrón con ^ y $:
/^\d{5}$/.test("28013") // código postal español: true
/^\d{5}$/.test("2801") // false
/^[6-9]\d{8}$/.test("612345678") // empieza por 6-9 y tiene 9 cifras
Pero ten claros sus límites:
- Una regex comprueba la forma, no si el dato es real. Un DNI necesita además la letra de control; nuestro validador de DNI, NIE e IBAN la calcula.
- Validar correos electrónicos con una regex «perfecta» es una trampa: el formato real es muy complejo. Basta con algo sencillo y comprobarlo enviando un correo.
- Los patrones con cuantificadores anidados como
(a+)+pueden tardar muchísimo con ciertos textos y bloquear un programa (lo que se conoce como ReDoS). Mantén los patrones simples.
Trucos para no perderte
- Escribe el patrón poco a poco y comprueba cada paso en el probador.
- Prueba también textos que no deberían coincidir.
- Si el patrón se vuelve ilegible, quizá sea mejor dividir el texto con
split()y unas condiciones normales. - En VS Code, activa el icono
.*del buscador (Ctrl+F) para buscar y reemplazar con expresiones regulares en tus archivos.
Fuentes consultadas
- Expresiones regulares (guía de JavaScript) (MDN Web Docs (Mozilla))
- COMO (HOWTO) de las expresiones regulares (Python Software Foundation)
