Imagen ornamental, creada por JM AlarconVisual Studio Code, como casi todos los editores potentes que hay por ahí, permite hacer búsqueda y reemplazo de cadenas utilizando expresiones regulares, tanto en el archivo que estamos editando, como de manera global. Aunque la funcionalidad es muy potente, tiene algunas limitaciones.

Si no dominas las expresiones regulares te estás perdiendo un enorme mundo de posibilidades, tanto para programar como para muchas otras cosas del día a día. Yo las uso constantemente. En mi humilde opinión un programador que no las conozca no es un buen profesional. Así de duro lo pongo 😈

Una de estas limitaciones es que no nos facilita la sustitución de fragmentos que encontremos por la versión en mayúsculas o minúsculas de las coincidencias. Es decir, no permite sustituir por los mismos contenidos pero transformados a mayúsculas o minúsculas, total o parcialmente.

Verás a qué me refiero. Por ejemplo, imagina que has migrado un código JavaScript de alguien que está acostumbrado a usar el nombrado de tipo Ruby en sus variables. Es decir, les pone nombres estilo este: mi_variable, con las palabras separadas por guiones bajos y todo en minúsculas. Este código funcionará sin problemas, pero en JavaScript la convención para nombrado de variables que todo el mundo utiliza es Camel Case, es decir, la primera palabra del nombre en minúsculas y las siguientes palabras pegadas, con cada una de ellas empezando por mayúsculas. En el ejemplo, la variable se debería llamar miVariable. El caso es que tenemos un código bastante largo lleno de variables en formato Ruby que queremos cambiar al formato CamelCase para que luego sea fácil de seguir y se adapte a lo que todo el mundo hace. ¿Cómo lo resuelves?

Está claro que una expresión regular muy sencilla viene de perlas para lograrlo. Pero sólo si nos deja cambiar el "casing" de las letras.

Algunos editores, como Sublime o Vim soportan la sustitución de grupos de captura de expresiones regulares con transformación de mayúsculas , minúsculas o "proper case" (o sea, el principio de cada palabra en mayúsculas y lo demás en minúsculas). Esto es porque el lenguaje que usan para las expresiones regulares las soporta (Perl o R son lenguajes que las tienen, por ejemplo). Sin embargo Visual Studio Code utiliza JavaScript para las expresiones regulares, así que no tiene esta posibilidad porque JavaScript tampoco la tiene. Así que lo tenemos difícil para lograrlo. Pero no es imposible con un poco de imaginación 😉

ACTUALIZACIÓN SEPT-2020: con la versión 1.49 de Code (lanzada en septiembre de 2020, aunque ponga agosto), se presenten los operadores \l, \u y \L y \U que nos permiten conseguir "nativamente" lo que se explica en este post. Los primeros, en minúsculas, convierten en minúsculas o mayúsculas respectivamente la primera letra de la cadena de sustitución ($1, $2, etc...) que estemos utilizando. Los segundos convierten la coincidencia completa. Hay que ponerlos delante, por ejemplo así:

De todos modos lo explicado a continuación sigue siendo válido y puede tener sus usos también.

El truco está en sacar partido a la edición simultánea del editor para hacer los cambios que nos interesan antes de la sustitución.

El proceso general que tenemos que seguir es el siguiente, y luego tendremos que adaptarlo a lo que necesitemos:

  1. Buscar con una expresión regular los caracteres o fragmentos de texto concretos que queremos transformar.
  2. Seleccionarlos todos con el atajo de teclado ALT-ENTER, que en VSCode sirve para seleccionar de un golpe todos los resultados de una búsqueda (poco conocido ¡anótatelo!)
  3. Transformar lo seleccionado a mayúsculas o minúsculas (no hay "proper case" 😟), usando el comando correspondiente de VS Code
  4. Hacer la sustitución de todas las coincidencias

Parece un poco lioso, pero en cuanto lo haces dos veces se convierte en algo sencillo. Vamos a verlo en acción con el ejemplo del cambio de formato de nombres de Ruby a Camel Case en este vídeo corto que he grabado como demostración:

Con esta técnica buscaremos primero esas partes que necesitamos y, tras haberlas transformado, podemos ya hacer una búsqueda normal (con o sin expresiones regulares) para obtener el resultado que necesitamos.

Obviamente tiene algunas limitaciones y no es tan guay cómo si tuviésemos soporte real para grupos de captura con cambio de "case", pero nos sacará de un apuro en muchas ocasiones.

¡Espero que te parezca útil!

¿Este post te ha ayudado?, ¿has aprendido algo nuevo? Entonces, me niego a creer que no puedas donar ni 1€ a los que necesitan algo tan básico como comer. Por cada euro que pongas tú, yo pondré otro.
¡No pases de ellos! También es tu responsabilidad.
Vamos a ayudarlos juntos