Como bien recuerdas, las expresiones regulares son patrones que se usan si quieres hacer coincidir combinaciones de caracteres en cadenas. Las expresiones regulares son objetos en Javascript y los patrones se utilizan con algunos métodos de JavaScript que ya conoces: los métodos exec(), text() de RegExp(), los métodos match(), matchAll(), replace(), replaceAll(), search() y split() de String.
Cómo sé que la mayoría de los programadores que conoces odian regex, en este artículo revisaremos algunas características básicas de las expresiones regulares en JavaScript.
¿Qué es una expresión regular?
Una expresión regular, o regex (de regular expression), es una secuencia “de caracteres que conforma un patrón de búsqueda”.
La idea es poder buscar patrones de cadenas de caracteres u operaciones de sustituciones. Usas las expresiones regulares, por ejemplo, si quieres encontrar “una determinada combinación de caracteres dentro de una cadena de texto”.
¿Cómo crear una expresión regular?
JavaScript te permite construir expresiones regulares de dos formas: usando un literal de expresión regular - un patrón encerrado entre barras -, o llamando a la función constructora (constructor) del objeto RegExp.
Literal de expresión regular
let re = /ab+c/;
Función constructora del objeto RegExp
let re = new RegExp(‘ab+c’);
¿Cuál es la mejor forma de las dos?
Con el literal de expresión regular, si la expresión regular permanece constante, su uso puede mejorar el rendimiento. Deberías usar la función constructora cuando sepas que el patrón de expresión regular cambiará, “o no conoces el patrón y lo estás obteniendo de otra fuente”.
¿Cómo escribir un patrón de expresión regular?
Un patrón de expresión regular está hecho de caracteres simples, como /xyz/, o una combinación de caracteres simples y especiales. /xy*z/ o /Chapter(\d+\.\d*/ serían dos ejemplos de una combinación. Los paréntesis que ves en el segundo ejemplo se utilizan como dispositivo de memoria.
Patrones simples
Como has podido ver, los patrones simples se construyen con caracteres para los que deseas encontrar una coincidencia directa. /xyz/ coincide sólo cuando ocurre la secuencia exacta “zyz”.
Caracteres especiales
Si, por ejemplo, quieres encontrar espacios en blanco puedes incluir caracteres especiales en el patrón. El uso de caracteres especiales es ideal para búsquedas de coincidencias que requieren algo más que una coincidencia directa.
Si quieres hacer coincidir una sola “x” seguida de cero o más “y”s seguidas de “z” podrías usar el patrón /x*yz/. “*” aquí significa “0 o más ocurrencias del ítem anterior”.
Caracteres especiales de JavaScript que deberías conocer:
- Aserciones. Incluyen límites, que indican el comienzo y el final de líneas y palabras.
- Clases de caracteres. Distinguen tipos de caracteres. Por ejemplo entre letras y dígitos.
- Grupos y rangos. Indican grupos y rangos de caracteres de expresión.
- Cuantificadores. Indican el número de caracteres o expresiones que deben coincidir.
- Escapar propiedades Unicode. Distinguir según las propiedades de los caracteres Unicode, por ejemplo para hacer coincidir emojis o signos de puntuación.
¿Cómo “escapar” los caracteres especiales?
Imagínate que quieres escapar un carácter muy especial como “*”. Debes hacerlo colocando una barra invertida delante de este carácter. Si quieres, por ejemplo, buscar “x” seguida de “*”, seguida de “y”, podrías usar /x\*y/. De esta forma, la barra invertida “escapa” el “*”, haciéndolo literal en vez de especial. Lo mismo ocurre si estás escribiendo un literal. ¿Cómo lo ves?
¿Cómo se usan los paréntesis?
Como hemos comentado anteriormente, los paréntesis alrededor de cualquier parte del patrón “de expresión regular hacen que se recuerde esa parte de la subcadena coincidente”. La subcadena se puede recuperar posteriormente para otro uso.
Conclusión
Cómo has podido ver, ¡lo básico de las expresiones regulares no es tan complicado como parece! Te animo a leer la documentación y los ejemplos de mozilla sobre las expresiones regulares, y hacer pruebas en herramientas online como regex101, antes de empezar a implementar regex en tus proyectos.
¿Cómo es tu relación con Regex? ¡Coméntalo abajo!
@seventyfour @freepik
Fuentes: