Métodos sobre flags

En las expresiones regulares el patrón define un modelo de lo que se está buscando. Esta descripción y su uso puede verse modificado o completada mediente el uso de las marcas o flags. Las propiedades que vemos aquí se refieren precisamente a esos modificadores. Todas se acceden mediante el identificador del patrón, son propiedades que se pasan mediante prototype.

  • flags: contiene la cadena de flags del patrón
  • dotAll: Comprueba se el carácter . (punto) abarca los saltos de linea (flag s)
  • global: se va a usar para una búsqueda global (flag b)
  • ignoreCase: ignora el tipo mayusculas o minúsculas (flag i )
  • multiline: buscar en texto con varias lineas (flag m)
  • sticky: buscar texto solo desde lastIndex (flag y)
  • unicode: el patrón se define usando códigos Unicode (flag u )

Estas propiedades no tienen demasiada complicación, pero aprovecho para ver el uso de estos modificadores, que si pueden ser un poco complicados al principio

Así el carácter punto se identifica con cualquier carácter, por defecto no concide con el salto de linea, pero esto puede ser un problema en textos multilinea, por eso se puede cambiar con el modificador s.

var frase = "El día de hoy es muy \n soleado, el día anterior fue lluvioso";

patron=/(día.+),/;

console.log( patron.test(frase) );   //false

patron=/(día.+),/s;

console.log(patron.test(frase) );   //true

console.log("se usa flag s: "+patron.dotAll);

En el ejemplo se busca una cadena que comienza con dia va seguida de uno o más caracteres y finaliza con la coma. Si no se usa el modificador s el carácter de nueva linea (\n) no coincide con el patrón punto y la búsqueda fallará.

El modificador de búsqueda global g extiende la búsqueda a toda la frase

var frase = "El día 1: soleado, el día 2: lluvioso";
patron=/(día \d)/;

console.log("Flag global "+patron.global);
console.log( patron.test(frase)+" "+RegExp.$1 );
console.log( patron.test(frase)+" "+RegExp.$1 );

patron=/(día \d)/g;

console.log("Flag global "+patron.global);

console.log( patron.test(frase)+" "+RegExp.$1 );

console.log( patron.test(frase)+" "+RegExp.$1 );

Buscamos la palabra día seguida de un espacio y un dígito. Si el patron.global es false (no usamos el flag g) la búsqueda siempre devuelve la primera coincidencia, pero si se usa este flag cada búqueda comienza donde acabó la anterior y l final se devuelven todas las coincidencias.

El modificador m para textos con varias lineas

var frase="Hoy es soleado\nmañana será lluvioso";
var patron
patron = /soleado$/
console.log("Multiline " + patron.multiline);
console.log("Encontrado: "+patron.test(frase));

patron = /soleado$/m
console.log("Multiline " + regex2.multiline);
console.log("Encontrado: "+regex2.test(frase));

La propiedad patron.multiline es true si la marca o flag multiline está en la expresión regular. Si es así la cadena en la que se busa se considera como formada por varias líneas, en caso contrario se considera como una única linea de texto. Al ser multiline antes del carácter cambio de linea (\n) está el final de linea (marca $ en el patrón) y después se encuentra el inicio de la siguiente linea (la marca ^).

El modificador sticky se coloca en el flag del patrón con la letra y y es como contrario a global y no pueden ir juentos.

var frase = "El día 1: soleado, el día 2: lluvioso";
var patron=/(día \d)/;
var patronSt=/(día \d)/y;

console.log("Flag sticky "+patron.sticky);
console.log( patron.test(frase) );     //true

patronSt.lastIndex = 0;
console.log("Flag sticky "+patronSt.sticky);
console.log( patronSt.test(frase) );     //false

patronSt.lastIndex = 3;

console.log("Flag sticky "+patronSt.sticky);
console.log( patronSt.test(frase) );     //true

El moodificador y hace que la búsqueda comienze en lastIndex y si el patrón no coincide devuelve false y no sigue buscado. Es decir, la coincidencia debe comenzar en la posisicón de la cadena indicada en la propiedad lastIndex de la expresión regular.

Los patrones pueden usar, además de caracteres ordinarios, códigos unicode. El modificador u hace que el pat´ron sea interpretado coomo cadena Unicode y la propiedad patron.unicode indica si se está usando este flag.

var frase = "12/12/2021";

var patron;

patron = /\p{L}+/u ;

console.log("¿Es unicode? "+patron.unicode )

console.log(patron.test(frase) )     //false

En este ejemplo se busca cualquier letra pero usando expresiones Unicode, como frase no tiene letras la búsqueda fallará. Aquí puedes ahondar en el uso de unicode con las presiones regulares