Trucos simples de RegEx para principiantes

¿Siempre quiso aprender las expresiones regulares pero se desanimó por su complejidad? En este artículo, le mostraré cinco trucos de RegEx fáciles de aprender que puede comenzar a usar de inmediato en su editor de texto favorito.

Configuración del editor de texto

Si bien casi cualquier editor de texto admite expresiones regulares ahora, usaré Visual Studio Code para este tutorial, pero puede usar el editor que desee. Además, tenga en cuenta que normalmente debe activar la expresión regular en algún lugar cerca de la entrada de búsqueda. Así es como se hace esto en VS Code:

1) . - Coincidir con cualquier personaje

Empecemos de forma sencilla. El símbolo de punto .coincide con cualquier carácter:

b.t

Partidos por encima de RegEx "bot”, "bat”y cualquier otra palabra de tres caracteres que comienza con by termina en t. Pero si desea buscar el símbolo de punto, debe escapar con \, por lo que esta expresión regular solo coincidirá con el texto exacto "b.t":

b\.t

2). * - Coincidir con cualquier cosa

Aquí .significa "cualquier carácter" y *significa "cualquier cosa antes de que este símbolo se repita varias veces". Juntos ( .*) significan "cualquier símbolo cualquier número de veces". Puede usarlo, por ejemplo, para buscar coincidencias que comiencen o terminen en algún texto. Supongamos que tenemos un método javascript con la siguiente firma:

loadScript(scriptName: string, pathToFile: string)

Y queremos encontrar todas las llamadas de este método donde pathToFileapunta a cualquier archivo en la carpeta “lua”. Puede usar la siguiente expresión regular para esto:

loadScript.*lua

Lo que significa "hacer coincidir todo el texto que comienza con “loadScript”seguido de cualquier cosa hasta la última aparición de “lua”"

3)? - Partido no codicioso

El ?símbolo después .*y algunas otras secuencias RegEx significan "coincidir lo menos posible". Si miras la imagen anterior, verás que el texto “lua”se ve dos veces en cada coincidencia, y todo hasta el segundo “lua”coincide. Si quisiera hacer coincidir todo hasta la primera aparición de en su "lua"lugar, usaría la siguiente expresión regular:

loadScript.*?lua

Lo que significa "coincidir con todo lo que comience con "loadScript"seguido de cualquier cosa hasta la primera aparición de "lua""

4) () $ - Capturar grupos y backreferences

Bien, ahora podemos hacer coincidir algún texto. Pero, ¿y si queremos cambiar partes del texto que encontramos? A menudo tenemos que hacer uso de grupos de captura para eso.

Supongamos que cambiamos nuestro loadScriptmétodo y ahora de repente necesita otro argumento insertado entre sus dos argumentos. Vamos a nombre de este nuevo argumento id, por lo que la nueva firma de la función debe tener este aspecto: loadScript(scriptName, id, pathToFile). No podemos usar la función de reemplazo normal de nuestro editor de texto aquí, pero una expresión regular es exactamente lo que necesitamos.

Arriba puede ver el resultado de ejecutar la siguiente expresión regular:

loadScript\(.*?,.*?\)

Lo que significa: "hacer coincidir todo lo que comience con "loadScript("seguido de cualquier cosa hasta el primero ,, luego seguido de cualquier cosa hasta el primero )"

Lo único que puede parecerle extraño aquí son los \símbolos. Se utilizan para escapar de los soportes.

Necesitamos escapar de los símbolos (y )porque son caracteres especiales utilizados por RegEx para capturar partes del texto coincidente. Pero necesitamos hacer coincidir los caracteres reales entre paréntesis.

En la expresión regular anterior, definimos dos argumentos de nuestra llamada al método con los .*?símbolos. Hagamos de cada uno de nuestros argumentos un grupo de captura independiente agregando (y )símbolos a su alrededor:

loadScript\((.*?),(.*?)\)

Si ejecuta esta expresión regular, verá que nada cambió. Esto se debe a que coincide con el mismo texto. Pero ahora podemos referirnos al primer argumento como $1y al segundo argumento como $2. Esto se llama referencia inversa y nos ayudará a hacer lo que queramos: agregar otro argumento en medio de la llamada:

Entrada de búsqueda:

loadScript\((.*?),(.*?)\)

Lo que significa lo mismo que la expresión regular anterior, pero asigna argumentos para capturar los grupos 1 y 2 respectivamente.

Reemplazar entrada:

loadScript($1,id,$2)

Lo que significa "reemplazar cada texto coincidente con texto “loadScript(“seguido por el grupo de captura 1, el “id”grupo de captura 2 y )". Tenga en cuenta que no necesita escapar de los corchetes en la entrada de reemplazo.

5) [] - Clases de caracteres

Puede enumerar los caracteres que desea hacer coincidir en una posición específica colocando [y ]símbolos alrededor de estos caracteres. Por ejemplo, class [0-9]coincide con todos los dígitos del 0 al 9. También puede enumerar todos los dígitos explícitamente: [0123456789]- el significado es el mismo. También puede usar guiones con letras, [a-z]coincidirá con cualquier carácter latino en minúsculas, [A-Z]coincidirá con cualquier carácter latino en mayúscula y [a-zA-Z]coincidirá con ambos.

También puede usar *después de una clase de carácter como después ., que en este caso significa: "coincidir con cualquier número de apariciones de los personajes en esta clase"

Ultima palabra

Debe saber que hay varios tipos de RegEx. El que discutí aquí es el motor Javascript RegEx. La mayoría de los motores modernos son similares, pero puede haber algunas diferencias. Por lo general, estas diferencias incluyen caracteres de escape y marcas de referencias inversas.

Le insto a que abra su editor de texto y comience a usar algunos de estos trucos ahora mismo. Verá que ahora puede completar muchas tareas de refactorización mucho más rápido que antes. Una vez que se sienta cómodo con estos trucos, puede comenzar a investigar más sobre las expresiones regulares.

Gracias por leer mi artículo hasta el final. Agregue aplausos si lo encontró útil y suscríbase para recibir más actualizaciones. Publicaré más artículos sobre expresiones regulares, javascript y programación en general.