Una expresión regular (RegExp) es un patrón que se utiliza para buscar, validar o extraer texto dentro de una cadena.
Piensa en ellas como:
🔎 Un detector de patrones dentro del texto.
Sirven para:
- Validar formularios (email, DNI, teléfono…)
- Buscar palabras en textos
- Reemplazar partes de una cadena
- Extraer información estructurada
2. Cómo se escriben en JavaScript
En JavaScript existen dos formas:
Forma literal (la más común)
let regex = /patron/;
Con el constructor RegExp
let regex = new RegExp("patron");
En clase usaremos principalmente la forma literal porque es más clara.
3. Métodos principales para usar expresiones regulares
test()
Devuelve true o false.
let texto = "Hola mundo";
let regex = /Hola/;
console.log(regex.test(texto)); // true
match()
Devuelve coincidencias.
let texto = "Tengo 2 perros y 3 gatos";
let regex = /\d/g;
console.log(texto.match(regex)); // ["2", "3"]
\d significa “digit”, es decir, cualquier número del 0 al 9.
Es equivalente a escribir:
/[0-9]/
Segundo: la barra / /
Las barras indican que lo que hay dentro es una expresión regular.
Tercero: la g
La g es una bandera (flag) que significa global.
Le dice al motor:
«No te quedes con la primera coincidencia. Busca todas.»
replace()
Permite reemplazar coincidencias.
let texto = "Hola mundo";
let regex = /mundo/;
console.log(texto.replace(regex, "Antonio"));
// Hola Antonio
4. Sintaxis básica (los símbolos importantes)
Aquí empieza la magia real.
Texto literal
/Hola/
Busca exactamente “Hola”.
. (punto)
Representa cualquier carácter excepto salto de línea.
/h.la/
Coincide con:
- hola
- hXla
- h9la
\d
Representa un número (0–9).
/\d/
\w
Representa letra, número o guion bajo.
\s
Representa espacio en blanco.
5. Cuantificadores (cuántas veces aparece algo)
*
Cero o más veces.
/ho*/
Coincide con:
- h
- ho
- hoo
- hooooo
+
Una o más veces.
/ho+/
Coincide con:
- ho
- hoo
- hooo
No coincide con solo “h”.
?
Cero o una vez.
{n}
Exactamente n veces.
/\d{3}/
Tres números seguidos.
{n,m}
Entre n y m veces.
/\d{2,4}/
Entre 2 y 4 números seguidos.
6. Grupos y alternativas
Paréntesis ()
Permiten agrupar.
/(hola)+/
|
Equivale a “o”.
/(perro|gato)/
Coincide con:
- perro
- gato
7. Anclas (inicio y fin)
^
Inicio de texto.
/^Hola/
$
Fin de texto.
/mundo$/
8. Banderas (modificadores)
Se colocan al final:
/patron/g
g → global
Busca todas las coincidencias.
i → ignore case
Ignora mayúsculas/minúsculas.
m → multiline
Ejemplo:
/hola/i
Coincide con:
- hola
- Hola
- HOLA
9. Casos prácticos reales
Validar un email simple
let email = "usuario@email.com";
let regex = /^[\w.-]+@[\w.-]+\.\w{2,}$/;
console.log(regex.test(email));
Explicación simplificada:
- Texto antes del @
- @
- Dominio
- Punto
- Extensión de al menos 2 letras
Validar un número de teléfono español (9 dígitos)
let telefono = "612345678";
let regex = /^[6-9]\d{8}$/;
console.log(regex.test(telefono));
Extraer números de un texto
let texto = "Pedido 123 con código 456";
let regex = /\d+/g;
console.log(texto.match(regex));
10. Patrón mental para entenderlas
Una expresión regular siempre responde a 3 preguntas:
- ¿Qué estoy buscando?
- ¿Cuántas veces debe aparecer?
- ¿Dónde debe estar (inicio, fin, en cualquier parte)?
Si los alumnos entienden eso, ya dominan el 80%.
11. Errores comunes
- Olvidar la bandera
g - No escapar caracteres especiales como
. - Confundir
*con+ - No usar
^y$en validaciones
12. Recomendación para practicar
Sitios útiles:
Permiten probar en tiempo real.
Ejemplos
1️⃣ Detectar si un texto contiene números
function contieneNumeros(texto) {
let regex = /\d/;
return regex.test(texto);
}console.log(contieneNumeros("Hola mundo")); // false
console.log(contieneNumeros("Hola 2026")); // true
Aquí usamos test() porque solo queremos verdadero o falso.
2️⃣ Extraer todos los números de un texto
function extraerNumeros(texto) {
let regex = /\d+/g;
return texto.match(regex);
}console.log(extraerNumeros("Pedido 123 y código 456"));
// ["123", "456"]
Aquí usamos \d+ porque queremos números completos, no dígitos sueltos.
3️⃣ Validar un email sencillo
No vamos a hacer el monstruo RFC de 3 kilómetros. Algo razonable para clase.
function validarEmail(email) {
let regex = /^[\w.-]+@[\w.-]+\.\w{2,}$/;
return regex.test(email);
}
console.log(validarEmail("antonio@email.com")); // true
console.log(validarEmail("antonio@email")); // false
Observa el uso de ^ y $ para asegurar que coincide TODO el texto.
4️⃣ Validar teléfono español (9 cifras empezando por 6, 7, 8 o 9)
function validarTelefono(telefono) {
let regex = /^[6-9]\d{8}$/;
return regex.test(telefono);
}
console.log(validarTelefono("612345678")); // true
console.log(validarTelefono("123456789")); // false
Aquí enseñamos:
[6-9]→ rango\d{8}→ exactamente 8 números^y$→ validación completa
5️⃣ Extraer hashtags de un texto
function extraerHashtags(texto) {
let regex = /#\w+/g;
return texto.match(regex);
}
console.log(extraerHashtags("Aprendiendo #JavaScript y #Regex"));
// ["#JavaScript", "#Regex"]
Aquí aparece algo interesante: # es literal, pero \w+ captura letras y números después.
6️⃣ Validar contraseña básica
Condiciones:
- mínimo 8 caracteres
- al menos una mayúscula
- al menos un número
function validarPassword(password) {
let regex = /^(?=.*[A-Z])(?=.*\d).{8,}$/;
return regex.test(password);
}
console.log(validarPassword("Hola1234")); // true
console.log(validarPassword("hola1234")); // false
Aquí introduces algo más avanzado:(?=...) → lookahead positivo.
Es como decir:
“Antes de aceptar esto, asegúrate de que en algún lugar hay una mayúscula y un número.”
Es un nivel más pro, pero abre la puerta a conversaciones interesantes.
7️⃣ Reemplazar espacios múltiples por uno solo
function limpiarEspacios(texto) {
let regex = /\s+/g;
return texto.replace(regex, " ");
}
console.log(limpiarEspacios("Hola mundo cruel"));
// "Hola mundo cruel"
Elementos para construir una Expresión Regular (JavaScript)
| Elemento | Símbolo | ¿Qué hace? | Ejemplo | Coincide con |
|---|---|---|---|---|
| Texto literal | hola | Busca exactamente ese texto | /hola/ | hola |
| Cualquier carácter | . | Cualquier carácter excepto salto de línea | /h.la/ | hola, h9la |
| Número | \d | Un dígito (0-9) | /\d/ | 5 |
| No número | \D | Cualquier cosa que NO sea número | /\D/ | a, # |
| Letra/número/_ | \w | Carácter alfanumérico o _ | /\w/ | a, 3, _ |
| No alfanumérico | \W | Lo contrario de \w | /\W/ | @, # |
| Espacio | \s | Espacio, tabulación, salto de línea | /\s/ | » « |
| No espacio | \S | Cualquier cosa que no sea espacio | /\S/ | a |
📌 Cuantificadores (cantidad)
| Símbolo | Significado | Ejemplo | Coincide con |
|---|---|---|---|
* | 0 o más veces | /ho*/ | h, ho, hoo |
+ | 1 o más veces | /ho+/ | ho, hoo |
? | 0 o 1 vez | /colou?r/ | color, colour |
{n} | Exactamente n veces | /\d{3}/ | 123 |
{n,} | n o más veces | /\d{2,}/ | 12, 1234 |
{n,m} | Entre n y m veces | /\d{2,4}/ | 12, 1234 |
📌 Conjuntos y rangos
| Símbolo | Significado | Ejemplo | Coincide con |
|---|---|---|---|
[abc] | a o b o c | /[aeiou]/ | a, e |
[a-z] | Rango | /[a-z]/ | cualquier minúscula |
[A-Z] | Mayúsculas | /[A-Z]/ | A |
[0-9] | Números | /[0-9]/ | 7 |
[^abc] | Todo excepto a, b o c | /[^0-9]/ | letras |
📌 Posición (anclas)
| Símbolo | Significado | Ejemplo | Coincide con |
|---|---|---|---|
^ | Inicio del texto | /^Hola/ | Hola mundo |
$ | Fin del texto | /mundo$/ | Hola mundo |
📌 Agrupación y alternativas
| Símbolo | Significado | Ejemplo | Coincide con |
|---|---|---|---|
( ) | Agrupa | /(hola)+/ | holahola |
| ` | ` | Alternativa (o) | `/(perro |
📌 Banderas (modificadores)
Se colocan al final:
| Bandera | Significado | Ejemplo |
|---|---|---|
g | Global (todas las coincidencias) | /\d/g |
i | Ignora mayúsculas/minúsculas | /hola/i |
m | Multilínea | /^hola/m |






![[Reto] - Tu propio juego con Slider y DOM d387b361-1c06-49dc-9112-e118ab38c3ba](https://laaventuradeaprender.com/wp-content/uploads/2026/02/d387b361-1c06-49dc-9112-e118ab38c3ba-150x150.png)
