Crear expresiones regulares

Una expresión regular se puede crear por tres caminos

  • Expresión literal, encerrando los metacaracteres entre / / seguidas de flags
  • Operador new con cadena y cadena de flags
  • Operador new con expresión de patrón

Una expresión para definir un patrón de búsqueda se puede construir encerrando la definición entre dos barras inclinadas( /metacars/flags), seguidas por los modificadores o flags si los hubiera

Al usar el operador new el constructor RegExp puede usar una cadena entrecomillada para definir el patrón como primer argumento y los flags como segundo argumento.

Por último también podemos aplicar el operador new a RegExp con un solo argumento, una expresión definitoria del patrón, con las flags incluídas. No se necesita segundo argumento. Es una mezcla de los dos métodos anteriores.

var dia = /Lunes/i; 

var cierto = new RegExp("(true)|(verdad)", "i");

var apto = new RegExp(/(apto)|(aprobado)/i);

cadena = "El lunes me dicen si en verdad soy apto";

console.log( dia.test(cadena) );    //true, encuentra lunes

console.log( cierto.test(cadena) );    //true, encuentra verdad

console.log( apto.test(cadena) );    //true, encuentra apto

En este ejemplo se han creado expresiones regulares con las tres formas. Lo normal es usar la opción con new cuando la expresión regular se crea durante el funcionamiento del script. Si es un valor constante se puede usar la expresión literal.

Tras realizar una búsqueda usando expresiones regulares se actualizan hasta nueve variables especiales que contienen las coincidencias en los subgrupos del patrón de búsqueda. Los sobgrupos son las partes del patrón encerradas entre paréntesis,

Estas variables se nombran $1 a $9 y son propiedades estátivas de la clase RegExp. Se pueden usar dentro de una cadena sin necesidad de usar el prefijo RegExp, como es habitual en propiedades y métodos estáticos.

var patHora; 

var patFecha;

var cadena;

cadena = "Hoy estamos a 12/04/2021 y son las 23:10:00";

patFecha = new RegExp("(\\d{1,2})\/(\\d{1,2})\/(2021)");

patFecha.test(cadena);

console.log("Día: "+RegExp. $1);

console.log("Mes: "+RegExp.$2);

console.log("Año: "+RegExp.$3);

patHora = /([0-9]{1,2}):([0-9]{1,2})(:[0-9]{1,2})/;

patHora.test(cadena);

console.log("Hora : "+RegExp.$1);

console.log("Minuto : "+RegExp.$2);

La expresión regular para la fecha (patFecha) se ha creado usando el operador new a partir de una cadena de caracteres entrecomillada.

Todos los símbolos que sean iguales a un metacarácter se deben escapar anteponiéndole la barra invertida, por eso la barra adelante ( / ) debe precederse de la barra invertida \ y así se considera un carácter normal. Y se usaría un segundo argumento para los modficadores o flags

El segundo patrón (patHoras), el usado para la hora, se ha creado mediante una expresión literal con la definición del patrón encerrada entre dos barras inclinadas / . Si se hubiera usado algún modificador lo pondríamos después de la segunda barra

Como argumento de RegExp al usar el operador new, también es posible usar una expresión de patrón, en este caso los flags van en el primer argumento.

Una nota respecto a las variables $1..$9: es mejor usarlas inmediatmente después de la operación de búsqueda, pues sus valores se mantienen entre búsquedas si no se les asignan nuevos valores. Lo habitual es utilizarlas en operaciones de búsqueda y substitución con el objeto string.