12. Aserciones Lookaround: Lookahead y Lookbehind Positivos y Negativos
Validaciones de ancho cero sin consumir caracteres: lookahead (?=...), (?!...) y lookbehind (?<=...), (?<!...) en JavaScript.
¿Qué es una Aserción Lookaround? (Ancho Cero)
Las aserciones lookaround permiten comprobar si un patrón está precedido o seguido por otro fragmento de texto, pero con una cualidad fundamental: son de ancho cero (zero-width); es decir, inspeccionan la cadena sin consumir caracteres ni avanzar el cursor de búsqueda.
Diagrama 12.1: Cuadrantes de Lookaround en JavaScript: Inspección hacia adelante (Lookahead) y hacia atrás (Lookbehind).
Los 4 Tipos de Lookaround en JavaScript Moderno
| Sintaxis | Nombre | Condición de Éxito |
|---|---|---|
(?=patrón) |
Lookahead Positivo | El texto que sigue coincide con el patrón. |
(?!patrón) |
Lookahead Negativo | El texto que sigue NO coincide con el patrón. |
(?<=patrón) |
Lookbehind Positivo (ES2018+) | El texto que antecede coincide con el patrón. |
(?<!patrón) |
Lookbehind Negativo (ES2018+) | El texto que antecede NO coincide con el patrón. |
⚡ Validador de Contraseñas Fuertes y Extracción de Monedas
Combina múltiples lookaheads para validar contraseñas seguras en cualquier orden y utiliza lookbehinds para extraer importes numéricos limpios.
// 1. Patrón Canónico de Contraseña Fuerte con Múltiples Lookaheads
// Reglas requeridas (en cualquier posición):
// - Al menos una letra minúscula: (?=.*[a-z])
// - Al menos una letra mayúscula: (?=.*[A-Z])
// - Al menos un dígito: (?=.*\d)
// - Al menos un símbolo especial: (?=.*[!@#$%^&*])
// - Longitud mínima de 8 caracteres: .{8,}
const patronPassword = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,}$/;
const contraseñasPrueba = [
"password123", // Falta mayúscula y símbolo
"Password123", // Falta símbolo
"P@ssword123", // ✔ Cumple todas las reglas
"Ab1!", // Muy corta (< 8)
"K!lopolis2026Secure" // ✔ Excelente
];
console.log("--- 1. Validación de Contraseñas con Lookahead ---");
contraseñasPrueba.forEach(pass => {
console.log(`${pass.padEnd(20)} => ${patronPassword.test(pass) ? "✔ Fuerte" : "❌ Débil"}`);
});
// 2. Extracción de Precios con Lookbehind Positivo (?<=...)
console.log("\n--- 2. Extracción de Precios Limpios con Lookbehind ---");
const factura = "Servicio: $150.00 USD, Descuento: $20.00 USD, Total: $130.00 USD";
// Coincide con números decimales solo si tienen el símbolo '$' inmediatamente antes
const regexPrecio = /(?<=\$)\d+(?:\.\d{2})?/g;
const preciosLimpios = factura.match(regexPrecio);
console.log("Valores numéricos puros (sin el símbolo $):");
console.log(preciosLimpios); // ["150.00", "20.00", "130.00"]
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección¿Por qué la técnica de concatenar múltiples lookaheads (?=...) al inicio de una expresión (/^(?=...)(?=...)/) es ideal para validar contraseñas?
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.🚀 ¿Quieres dominar Regex en JavaScript: Expresiones Regulares & RegExp y crear proyectos reales?
Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.
🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.