Tema 10 · Flags

10. Banderas (Flags): g, i, m, s (dotAll), u (Unicode) y v (ES2024)

Guía exhaustiva de modificadores: búsqueda global (g), case-insensitive (i), multilínea (m), punto total (s), Unicode (u) y set notation (v).

Las Banderas de Configuración del Motor RegExp

Las banderas (flags) se colocan al final del delimitador de cierre (ej: /patron/gims) y alteran globalmente las reglas de coincidencia del motor.

Bandera Nombre Efecto Principal
g Global Busca todas las coincidencias posibles en lugar de detenerse en la primera.
i Ignore Case Ignora diferencias entre mayúsculas y minúsculas (a coincide con A).
m Multiline Hace que ^ y $ coincidan con el inicio y fin de cada línea individual (tras un \n).
s dotAll (ES2018) Permite que el metarácter punto (.) coincida también con saltos de línea (\n, \r).
u Unicode Trata la expresión regular como una secuencia de puntos de código Unicode reales (soporta emojis y pares subrogados).
v unicodeSets (ES2024) Evolución de u: habilita operaciones de conjuntos (diferencia --, intersección &&) en clases.
y Sticky Coincide únicamente en la posición exacta indicada por lastIndex (sin escanear hacia adelante).
d hasIndices (ES2022) Genera la propiedad indices con las posiciones [inicio, fin] de cada grupo capturado.

⚡ Efectos Prácticos de las Banderas Modernas en JavaScript

Compara la captura multilínea, el comportamiento del punto con la bandera s (dotAll) y la detección de caracteres Unicode con la bandera u.

banderas-flags.js
Solo lectura
// 1. Bandera 'm' (Multilínea) vs comportamiento estándar
const textoLineas = `ID: 101 - Servidor Web
ID: 102 - Base de Datos
ID: 103 - Balanceador Nginx`;

// Sin 'm', ^ solo coincide con la primera línea
console.log("--- 1. Bandera 'm' (Multilínea) ---");
console.log("Sin 'm':", textoLineas.match(/^ID:\s*\d+/g)); // ["ID: 101"]
console.log("Con 'm':", textoLineas.match(/^ID:\s*\d+/gm)); // ["ID: 101", "ID: 102", "ID: 103"]

// 2. Bandera 's' (dotAll): El punto '.' incluye saltos de línea
const bloqueCodigo = `<div>
  <p>Párrafo de prueba</p>
</div>`;

console.log("\n--- 2. Bandera 's' (dotAll) ---");
console.log("Sin 's' (falla con saltos):", bloqueCodigo.match(/<div>.*<\/div>/)); // null
console.log("Con 's' (abarca todo):     ", bloqueCodigo.match(/<div>.*<\/div>/s) !== null); // true

// 3. Bandera 'u' (Unicode): Emojis y pares subrogados
const textoEmoji = "Bienvenido a Kilopolis 🚀📚🎯";

console.log("\n--- 3. Bandera 'u' (Unicode) ---");
// Un emoji ocupa 2 unidades UTF-16; sin 'u', clases como /^.$/ fallan
const regexEmoji = /\p{Extended_Pictographic}+/gu;
const emojisEncontrados = textoEmoji.match(regexEmoji);
console.log("Emojis extraídos:", emojisEncontrados);
Pruébalo tú mismo » Se abre en una nueva pestaña con ejecución en vivo
🧠
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección
1 Pregunta
Pregunta 1
¿Qué problema resuelve la bandera "s" (dotAll) introducida en ECMAScript 2018?
🦉
¿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.