Expresiones Regulares
Expresiones Regulares Fundamental
Section titled “Expresiones Regulares ”Creación de RegExp Básico
Section titled “Creación de RegExp ”// Usando constructorconst regex1 = new RegExp('patron', 'flags');
// Usando literalconst regex2 = /patron/flags;
// Ejemplosconst regexEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;const regexTelefono = /^\d{9}$/;Flags comunes
Section titled “Flags comunes”// i - Insensible a mayúsculas/minúsculasconst regexNombre = /juan/i; // Coincide con "Juan", "JUAN", "juan"
// g - Global (todas las coincidencias)const regexPalabra = /palabra/g;
// m - Multilíneaconst regexLineas = /^inicio/m;
// s - Dot all (el punto coincide con cualquier carácter)const regexTodo = /./s;
// u - Unicodeconst regexUnicode = /😀/u; // Emoji sonrienteMetacaracteres Importante
Section titled “Metacaracteres ”Caracteres básicos
Section titled “Caracteres básicos”// . - Cualquier carácter excepto nueva líneaconst regex1 = /h.la/; // "hola", "hala", "h3la"
// ^ - Inicio de líneaconst regex2 = /^Hola/;
// $ - Fin de líneaconst regex3 = /mundo$/;
// \w - Carácter de palabra [a-zA-Z0-9_]const regex4 = /\w+/;
// \d - Dígito [0-9]const regex5 = /\d{3}/; // Tres dígitos
// \s - Espacio en blancoconst regex6 = /\s+/;Cuantificadores
Section titled “Cuantificadores”// * - Cero o másconst regex1 = /ab*c/; // "ac", "abc", "abbc"
// + - Uno o másconst regex2 = /ab+c/; // "abc", "abbc"
// ? - Cero o unoconst regex3 = /colou?r/; // "color", "colour"
// {n} - Exactamente nconst regex4 = /d{4}/; // "1234"
// {n,} - n o másconst regex5 = /w{2,}/; // Dos o más caracteres
// {n,m} - Entre n y mconst regex6 = /d{2,4}/; // Entre 2 y 4 dígitosMétodos de RegExp Importante
Section titled “Métodos de RegExp ”test() y exec()
Section titled “test() y exec()”const texto = "Mi número es 123-456-789";const regex = /d{3}-d{3}-d{3}/;
// test() - Devuelve true/falseconsole.log(regex.test(texto)); // true
// exec() - Devuelve array con detallesconst resultado = regex.exec(texto);console.log(resultado[0]); // "123-456-789"console.log(resultado.index); // Posición donde se encontróMétodos de String
Section titled “Métodos de String”const texto = "La casa es roja y la puerta también es roja";
// match() - Encuentra coincidenciasconsole.log(texto.match(/roja/g)); // ["roja", "roja"]
// search() - Encuentra posiciónconsole.log(texto.search(/roja/)); // Índice de primera coincidencia
// replace() - Reemplaza coincidenciasconsole.log(texto.replace(/roja/g, "azul"));
// split() - Divide usando regexconsole.log(texto.split(/s+/)); // Divide por espaciosGrupos y referencias Avanzado
Section titled “Grupos y referencias ”Grupos de captura
Section titled “Grupos de captura”const regex = /(w+)s+(w+)/;const texto = "Juan Pérez";
const resultado = regex.exec(texto);console.log(resultado[1]); // "Juan"console.log(resultado[2]); // "Pérez"
// Grupos nombradosconst regexNombrado = /(?<nombre>w+)s+(?<apellido>w+)/;const { groups } = texto.match(regexNombrado);console.log(groups.nombre); // "Juan"console.log(groups.apellido); // "Pérez"Referencias hacia atrás
Section titled “Referencias hacia atrás”// Referencia al primer grupo capturadoconst regex = /(\w+)\s+\1/;console.log(regex.test("hola hola")); // trueconsole.log(regex.test("hola adios")); // false
// Con grupos nombradosconst regexNombrado = /(?<palabra>\w+)\s+\k<palabra>/;console.log(regexNombrado.test("hola hola")); // truePatrones comunes Referencia
Section titled “Patrones comunes ”Validación de formatos
Section titled “Validación de formatos”// Emailconst regexEmail = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,6}$/;console.log(regexEmail.test('usuario@dominio.com')); // true
// URLconst regexURL = /^(https?://)?([da-z.-]+).([a-z.]{2,6})([/w .-]*)*/?$/;console.log(regexURL.test('https://ejemplo.com')); // true
// Teléfono españolconst regexTelefono = /^(?:(?:+|00)34)?[6789]d{8}$/;console.log(regexTelefono.test('+34612345678')); // true
// Código postal españolconst regexCP = /^d{5}$/;console.log(regexCP.test('28001')); // true
// DNI españolconst regexDNI = /^d{8}[A-Z]$/;console.log(regexDNI.test('12345678X')); // true
// Contraseña fuerteconst regexPassword = /^(?=.*[A-Za-z])(?=.*d)[A-Za-zd]{8,}$/;console.log(regexPassword.test('MiContraseña123')); // true
// Fecha (DD/MM/YYYY)const regexFecha = /^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)dd$/;Mejores prácticas Recomendado
Section titled “Mejores prácticas ”Optimización
Section titled “Optimización”// ❌ Malo - Recreando regex en buclefor (let i = 0; i < items.length; i++) { const regex = /patrón/; if (regex.test(items[i])) { // ... }}
// ✅ Bueno - Regex fuera del bucleconst regex = /patrón/;for (let i = 0; i < items.length; i++) { if (regex.test(items[i])) { // ... }}Legibilidad
Section titled “Legibilidad”// ❌ Malo - Regex complejo sin comentariosconst regex = /^(?:(?:+|00)34)?[6789]d{8}$/;
// ✅ Bueno - Regex documentadoconst PHONE_REGEX = /^(?:(?:+|00)34)?[6789]d{8}$/;/* Valida números de teléfono españoles: - Prefijo internacional opcional (+34 o 0034) - Primer dígito debe ser 6, 7, 8 o 9 - Seguido de 8 dígitos*/Validación segura
Section titled “Validación segura”function validarEntrada(texto, patron) { try { if (typeof texto !== 'string') { throw new Error('El texto debe ser una cadena'); }
const regex = new RegExp(patron); return regex.test(texto); } catch (error) { console.error('Error en validación:', error); return false; }}
🐝