W3docs

Flag m (multilínea) en las expresiones regulares de JavaScript

El flag m en las expresiones regulares de JavaScript permite que los anclajes ^ y $ coincidan con el inicio y el final de cada línea de un string multilínea.

Introducción al modo multilínea

El flag m de las expresiones regulares de JavaScript permite que los anclajes ^ y $ coincidan con el inicio y el final de cada línea dentro de un string multilínea, en lugar de coincidir solo con el inicio y el final del string completo. Resulta especialmente útil cuando trabajas con texto de varias líneas y necesitas buscar patrones línea por línea.

Esta página explica qué cambia el flag m, en qué se diferencia del comportamiento predeterminado de los anclajes, cómo se combina con los flags g e i y qué patrones prácticos puedes usar para analizar texto orientado a líneas, como los registros (logs).

Comportamiento predeterminado frente al modo multilínea

De forma predeterminada (sin m), ^ coincide únicamente al principio de todo el string y $ solo al final de todo el string. Un salto de línea (\n) dentro del string es simplemente un carácter más: no crea nuevas posiciones de anclaje.

Con el flag m, ^ también coincide con la posición situada justo después de cada \n, y $ también coincide con la posición situada justo antes de cada \n (además del inicio y el final reales del string). La coincidencia en sí nunca incluye el carácter de salto de línea: los anclajes son posiciones de ancho cero.

javascript— editable

Sin m, ^ solo ancla el abc que está al principio del string. Al añadir m, ^ también coincide después del salto de línea, de modo que se encuentran las dos líneas abc. (El flag g es el que recoge todas las coincidencias en lugar de detenerse en la primera.)

El flag m: activar el modo multilínea

Cuando usas el flag m, los anclajes ^ y $ coinciden con las posiciones anteriores y posteriores a los saltos de línea dentro del string.

Uso del flag m

javascript— editable

En este ejemplo, gracias al flag m, la expresión regular ^abc coincide con el inicio de cada línea que empieza por "abc". El flag g garantiza que se encuentren todas las apariciones. Sin el flag m, solo coincidiría con "abc" al principio del string.

Ejemplo: coincidencia en varias líneas

javascript— editable

Aquí, la expresión regular ^start coincide con el comienzo de las líneas que empiezan por "start" gracias a la combinación de los flags m y g.

Aplicaciones prácticas

Coincidencias al inicio de las líneas en texto multilínea

El flag m es especialmente útil para buscar patrones concretos al principio o al final de cada línea de un string multilínea.

javascript— editable

Este ejemplo muestra cómo ^hello con el flag m coincide con "hello" al principio de cada línea.

Coincidencias al final de las líneas en texto multilínea

Del mismo modo, puedes usar el flag m para buscar patrones al final de cada línea.

javascript— editable

Aquí, world$ con el flag m coincide con "world" al final de cada línea.

Ejemplo: extraer líneas concretas

javascript— editable

Este ejemplo muestra cómo extraer, con el flag m, todas las líneas de un archivo de registro que empiezan por "Error:".

Combinar flags

Puedes combinar el flag m con otros flags para potenciar tus expresiones regulares. Por ejemplo, si combinas el flag m con el flag i (que ignora mayúsculas y minúsculas), puedes hacer búsquedas multilínea sin distinguir entre mayúsculas y minúsculas.

Ejemplo: coincidencia multilínea sin distinguir mayúsculas y minúsculas

javascript— editable

En este ejemplo, la expresión regular coincide con las líneas que contienen "hello" sin importar si están en mayúsculas o minúsculas, gracias a la combinación de los flags m e i.

  • El patrón ^.*hello.*$ coincide con cualquier línea que contenga "hello", sin distinguir mayúsculas de minúsculas.
  • El flag m hace que cada línea del string multilínea se trate de forma individual.
  • Hello world, hello world y HELLO WORLD coinciden con el patrón porque contienen "hello" (sin distinguir mayúsculas y minúsculas) en algún punto de la línea.
Información

Usa el flag m en las expresiones regulares de JavaScript para aplicar los anclajes ^ y $ a cada línea de un string multilínea y mejorar así tu capacidad de validar y manipular contenido línea por línea.

Usa el flag m para validar línea por línea

El flag m es ideal para los casos en los que necesitas validar o manipular cada línea de forma individual dentro de un string multilínea.

Ejemplo: validar un número de teléfono de EE. UU.

javascript— editable

Esta expresión regular comprueba que el número de teléfono tenga el formato (123) 456-7890. Usa ^ para indicar el inicio y $ para indicar el final, de modo que cada línea completa debe ajustarse al patrón especificado.

Así, tanto "(123) 456-7890" como "(234) 567-8901" coinciden con el patrón, porque siguen el formato (xxx) xxx-xxxx para el que se diseñó la expresión regular.

Errores comunes

  • m solo afecta a ^ y $, no a . — El punto sigue sin coincidir con un salto de línea. Si necesitas que . también atraviese los saltos de línea, usa el flag independiente s (dotAll). El flag m cambia dónde empiezan y terminan las líneas; el flag s cambia con qué coincide ..
  • m no equivale a buscar palabras completas. Para hacer coincidir los bordes de una palabra en lugar de los de una línea, usa el límite de palabra \b en vez de ^/$.
  • Sin g, match() devuelve solo la primera coincidencia. El flag m habilita posiciones de anclaje adicionales, pero sigues necesitando g para recoger todas las líneas. Combínalos como gm.
javascript— editable

Conclusión

El flag m de las expresiones regulares de JavaScript amplía la funcionalidad de los anclajes ^ y $ para que coincidan con el inicio y el final de cada línea de un string multilínea. Esta capacidad es muy valiosa para procesar datos de texto con varias líneas, ya que permite buscar patrones y validar contenido de forma precisa, línea por línea.

Práctica

Práctica
¿Cuál es la función del flag 'm' en las expresiones regulares de JavaScript?
¿Cuál es la función del flag 'm' en las expresiones regulares de JavaScript?
Was this page helpful?