Lecciones del módulo (2/4)
Reemplazo básico y `$1`
En JavaScript, String.prototype.replace(regex, replacement) realiza una búsqueda de patrón y reemplaza cada coincidencia con la cadena dada. Con la flag g, reemplaza todas las coincidencias; sin ella, solo la primera. replaceAll fuerza el comportamiento global (y requiere la flag g en la regex).
'ciao mondo'.replace(/o/g, '0'); // "cia0 m0nd0"
'Mario Rossi'.replace(/(\w+) (\w+)/, '$2 $1'); // "Rossi Mario"Referencias en la cadena de reemplazo
Dentro de la cadena de reemplazo, estos elementos son especiales:
$1,$2, … -- referencia hacia atrás al grupo numerado de la regex.$<name>-- referencia hacia atrás al grupo nombrado.$&-- todo el texto coincidente.- `$`` -- texto antes de la coincidencia.
$'-- texto después de la coincidencia.$$-- un signo$literal.
const data = '2024-03-15';
data.replace(/(\d{4})-(\d{2})-(\d{2})/, '$3/$2/$1');
// "15/03/2024"Reformatea la fecha invirtiendo el orden. La regex tiene 3 grupos, y en la cadena de reemplazo haces referencia a ellos como $1, $2, $3.
Referencias especiales en reemplazos
Además de $1 y $2, puedes usar $& para insertar todo el texto coincidente, $\`` para todo el texto que precede a la coincidencia y $'` para todo el texto que le sigue. Esto permite realizar reemplazos complejos incluso sin escribir código JS.
Pruébalo tú
Encuentra cada fecha en formato AAAA-MM-DD con tres grupos (año, mes, día). De esta forma podrías usar replace para obtener DD/MM/AAAA.
Mostrar pista
Reemplaza \d+ con \d{4}, \d{2}, \d{2} dentro de tres grupos capturados con (...).
Solución disponible después de 3 intentos
Ejercicio de repaso
Encuentra 'nombre apellido' como dos grupos nombrados `nome` y `cognome`, de modo que puedas reescribirlo como `cognome, nome` usando `$<cognome>, $<nome>`.
Mostrar pista
Usa (?<nome>\w+) y (?<cognome>\w+) separados por \s+.
Solución disponible después de 3 intentos
Desafío adicional
Crea un patrón de captura para invertir el orden de nombre y apellido del formato `Apellido, Nombre` al formato `Nombre Apellido`.
Mostrar pista
Usa dos grupos de captura para el apellido y el nombre; el reemplazo se realizará a través de $2 $1.
Solución disponible después de 3 intentos