Todo lo que necesitas saber para Trabajar con Expresiones Regulares en JavaScript

Todo lo que necesitas saber para trabajar con Expresiones Regulares en JavaScript. Nos ahorrarán mucho tiempo validando campos de formulario, realizando búsquedas, reemplazando textos, manipulando datos, etc …

Al igual que en otros lenguajes de programación la palabra clave RegExp en JavaScript nos indica que estamos tratando con expresiones regulares.

¿Como se crean las expresiones regulares?

Las expresiones regulares se pueden crear de dos maneras diferentes:

  • Usando las expresiones directamente.
  • Haciendo uso del Objeto RegExp().

La diferencia es que usando RegExp() podemos cambiar el patrón según sea el caso. Veamos un ejemplo muy básico de como crear una expresión regular directamente.  El método test() evalúa si la hay coincidencias del patrón en la cadena y más adelante profundizaremos un poco más.

Por lo que para crear esta misma expresión usando el objeto RegExp() haremos lo siguiente:

La ventaja de usar RegExp() es que podemos cambiar el patrón según sea el caso y además acepta otro parámetro denominado banderas (flags) que nos permiten añadir funcionalidades extra que veremos más adelante).

Componentes de una expresión regular

Una expresión regular se puede componer de caracteres simples como hemos visto en el ejemplo anterior o de una combinación de caracteres simples y especiales:

  • Los patrones simples se usan para buscar coincidencias exactas (Por ejemplo /hola/) y ya hemos visto como trabajan en el ejemplo anterior.
  • Cuando necesitamos buscar algo más concreto necesitamos hacer uso de caracteres especiales (Por ejemplo /[0-9]/ que busca coincidencias de números en la cadena)

Caracteres especiales

Para crear expresiones regulares más complejas se usan caracteres especiales. Vamos a ver cuales son los caracteres especiales más utilizados:

  • \  Una barra invertida que preceda a un carácter (por ejemplo \a) indicará que este debe ser interpretado literalmente. Por lo que si indicamos \a* estaremos indicando que busque cualquier caracter «a» un número ilimitado de veces.
  • ^ Índica que debemos buscar en el comienzo de una cadena. Por lo que ^J encuentra coincidencias en una cadena como puede ser «JavaScript 2020»
  • $ Indica el fin de una cadena. Por ejemplo /$a/ encuentra coincidencias en la cadena «Esto es Roma»
  • * indica que puede ser cualquier coincidencia. Por lo que /Ho*/ encuentra coincidencias que comiencen por Ho, como pueden ser las cadenas Hola, Hora, Hombre, etc …
  • + Encuentra el carácter que le precede. /o+/ encuentra el carácter o en la cadena «Hola»
  • ? Encuentra el carácter que le precede pero tan sólo una vez. /H?/
  • .  Encuentra cualquier carácter que le preceda, por lo que /.a/ encuentra coincidencias en «la»

Las Banderas (flags)

Las banderas en una expresión regular son opcionales y permiten especificar funcionalidades especificas en una búsqueda.

  • i  la búsqueda no tiene en cuenta si son mayúsculas ó minúsculas (no sensitive).
  • g  se realiza una búsqueda global por lo que se siguen buscando coincidencias aunque hallan sido encontradas otras.
  • m  buscar coincidencias en múltiples líneas.
  • u  para caracteres unicode.

Los métodos test() y match()

El método test() ejecuta una búsqueda para así poder evaluar si se han encontrado coincidencias de una expresión regular. Hay que tener en cuenta que test() devuelve un valor booleano true o false, pero nunca el resultado de dicha búsqueda.

Funciona muy parecido al método search() pero este último en vez de true o false devuelve un valor entre 0 y 1.

El método match() es usado para obtener las ocurrencias encontradas en una cadena a través de una expresión regular.

Ahora que ya sabemos un poco más sobre expresiones regulares podemos ver cómo funcionan con un par de ejemplos. Veamos un ejemplo sencillo usando RegExp()

Ahora el mismo ejemplo usando un patrón directamente:

Otros Caracteres Especiales y Patrones

Existen otros muchos caracteres especiales y que nos permiten crear expresiones más complejas. Estos caracteres especiales requieren escapar la barra invertida para que funcionen correctamente.

  • \d  cualquier dígito. Equivale a [0-9]
  • \D cualquier carácter que no sea un dígito. Por lo que la expresión ^\\D comprueba si el primer carácter no es un dígito.
  • \w cualquier carácter alfanumérico incluidos guiones bajos. Equivaldría a [A-Za-z0-9_]
  • \W cualquier carácter que no sea alfanumérico y guiones bajos. Puede ser una #, €, % etc …
  • {n} el número de ocurrencias que estamos buscando. Por ejemplo ^\\d{2} especifica que buscamos 2 dígitos al comienzo de la cadena.
  • {n,m} ocurrencias encontradas entre n y m veces.
  • x|y ocurrencias encontradas de x o y.
  • \t  coincidencias con tabulaciones.
  • \r  coincidencias con retornos de carro.
  • \n coincidencias con saltos de línea.
  • \f  coincidencias con saltos de página.
  • [a-z] un grupo de caracteres. Con el guión especificamos que es un rango de caracteres comprendidos entre la a y la z.
  • [0-9] lo mismo pero es un grupo de dígitos comprendidos entre el 0 y el 9.
  • [^a-z] cualquier coincidencia que no este en el grupo especificado.

Con estos caracteres y patrones ya podemos proceder a realizar otro ejercicio para aprender a crear expresiones regulares más complejas.

En este ejemplo vamos a comprobar si una matrícula europea introducida por el usuario es correcta.

Otra expresión correcta aunque más larga podría ser:

Y ahora veamos el ejemplo ya funcional que nos va a permitir realizar la comprobación de una matrícula europea desde un formulario web:

El método replace()

El método replace() retorna una nueva cadena como resultado de las coincidencias encontradas en esta.

Los parámetros que puede recibir replace() son un patron/cadena y la nueva cadena o función. Hay que tener en cuenta que no cambia la cadena sino que retorna una nueva.

Veamos un ejemplo donde vamos a reemplazar una palabra en una cadena.

El resultado de dicha expresión es el siguiente:

El método split()

El método split() divide una cadena en un array de cadenas, para ello necesitamos indicar el separador de cadenas que especifica donde realizar cada corte.

Los parámetros que admite split() son un separador y el limite de palabras que queremos cortar.

El resultado sería el siguiente:

Comprobación de Expresiones Regulares

Hay muchas páginas donde podemos comprobar si nuestras expresiones regulares son correctas antes de aplicarlas en nuestro código. Esto nos puede ahorrar tiempo sino estamos habituados a trabajar con ellas.

Online Regex tester and Debuguer

Para más información sobre expresiones regulares puedes seguir este enlace.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.