Novedades ES6

Modificadores de expresiones regulares

A la hora de trabajar con cadenas de texto todos los lenguajes de programación nos proporcionan unas útiles pero simples funciones comunes: buscar una subcadena dentro de un texto, buscar la primera aparición de un carácter, etc.

El objeto RegExp se le puede aplicar tres modificadores que actúan sobre el patrón completo, después del limitador final se pueden indicar modificadores que varían el procesamiento del patrón. Los más comunes son:

  •  "i" (insensitive) Indica que las letras del patrón pueden ser mayúsculas o minúsculas
  • "g" (global) indica que los caracteres a buscar pueden  ser encontrados varias veces en la cadena   de caracteres.
  • "m"  (multiline) Por defecto, los patrones son considerados como una única línea. Este modificador indica que el patrón es multilínea, por lo que los metacaracteres de principio y final de cadena ("^" y "$" respectivamente) también pueden indicar adicionalmente principio y final de línea
  • "s" Indica que el carácter especial punto "." puede reemplazar a cualquier carácter, incluyendo el salto de línea (por defecto, el punto no reemplaza al salto de línea)
  • "u" Indica que el patrón está codificado en UTF-8

Por ejemplo, para indicar el patrón "Introducción a PCRE" sin considerar mayúsculas o minúsculas y codificado en UTF-8 escribiríamos /introducción a pcre/iu

Estos modificadores pueden aplicarse en forma independiente o conjunta a una expresión regular.

Veamos un ejemplo del modificador i sobre una expresión regular:

<!DOCTYPE html>
<html>
<head>
  <title>Ejemplo de JavaScript</title>
  <meta charset="UTF-8">
</head>
<body>

<script>
  var palabra='Administracion';
  var patron=/adm/i;
  if (patron.test(palabra))
    document.write('La palabra '+palabra+' contiene la cadena adm sin tener en cuenta mayúsculas/minúsculas');
</script>
  
</body>
</html>

Los modificadores se ubican luego de la segundo barra donde declaramos la expresión regular:

  var patron=/adm/i;

Ahora veamos un problema donde activamos dos modificadores:

<!DOCTYPE html>
<html>
<head>
  <title>Ejemplo de JavaScript</title>
  <meta charset="UTF-8">
</head>
<body>

<script>
  var oracion='El auto tiene el mejor motor que elegimos';
  var patron=/el/gi;
  var vec=patron.exec(oracion);
  document.write(vec.index);  //0
  document.write('<br>');
  vec=patron.exec(oracion);
  document.write(vec.index);  //14
  document.write('<br>');
  vec=patron.exec(oracion);
  document.write(vec.index);  //33
  document.write('<br>');
  vec=patron.exec(oracion);  
  document.write(vec);  //null
</script>
  
</body>
</html>

Hemos definido el patron los modificadores g (global) e i (insensitive):

 var patron=/el/gi;

Estamos buscando el patrón 'el' dentro de la oración 'El auto tiene el mejor motor que elegimos'. Como vemos la cadena 'el' se repite tres veces en la oración sin tener en cuenta mayúsculas y minúsculas:

El auto tiene el mejor motor que elegimos

Utilizamos el método exec ya que el método test solo tiene en cuenta la primera ocurrencia.

Para que tenga sentido la llamada de sucesivas veces del método exec debemos activar el modificador g (global)

Si no activamos el modificador global cada vez que llamamos al método exec la búsqueda comienza desde el principio.