Saltar al contenido principal
eLearner.app
Módulo 7 · Lección 2 de 426/32 en el curso~10 min
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).

JS
'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.
JS
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ú

Ejercicio#regex.m7.l2.e1
Intentos: 0Cargando...

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.

Cargando editor...
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

Ejercicio#regex.m7.l2.e2
Intentos: 0Cargando...

Encuentra 'nombre apellido' como dos grupos nombrados `nome` y `cognome`, de modo que puedas reescribirlo como `cognome, nome` usando `$<cognome>, $<nome>`.

Cargando editor...
Mostrar pista

Usa (?<nome>\w+) y (?<cognome>\w+) separados por \s+.

Solución disponible después de 3 intentos

Desafío adicional

Ejercicio#regex.m7.l2.e3
Intentos: 0Cargando...

Crea un patrón de captura para invertir el orden de nombre y apellido del formato `Apellido, Nombre` al formato `Nombre Apellido`.

Cargando editor...
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