Saltar al contenido principal
eLearner.app
Módulo 7 · Lección 3 de 427/32 en el curso~12 min
Lecciones del módulo (3/4)

Reemplazo con callback

Si una cadena de reemplazo no es suficiente, pasa una función: str.replace(regex, (match, ...groups) => string). La callback se invoca para cada coincidencia y su valor de retorno se convierte en el reemplazo.

JS
'prezzi: 10 20 30'.replace(/\d+/g, (m) => Number(m) * 1.22);
// "prezzi: 12.2 24.4 36.6" (22% IVA)

Argumentos de la callback

JS
str.replace(regex, (match, p1, p2, ..., offset, original, groups) => ...);
  • match -- toda la coincidencia.
  • p1, p2, … -- los grupos capturados en orden.
  • offset -- índice de la coincidencia en la cadena original.
  • original -- toda la cadena.
  • groups -- objeto con los grupos nombrados (si los hay).
JS
'2024-03-15'.replace(/(\d{4})-(\d{2})-(\d{2})/, (_, a, m, g) => `${g}/${m}/${a}`);
// "15/03/2024"

La callback te otorga un poder arbitrario: análisis sintáctico, búsquedas, conversión, escape de HTML… todo lo que una cadena estática no puede hacer.

Argumentos avanzados en las callbacks de replace

La función callback recibe varios argumentos: la coincidencia completa, cada grupo capturado, la posición de la coincidencia dentro de todo el texto y la cadena de entrada original. Esto permite implementar una lógica de transformación sofisticada basada en el contexto.

Pruébalo tú

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

Encuentra cada número entero en el texto (en replace pasarías `(m) => Number(m) * 2` para duplicarlo).

Cargando editor...
Mostrar pista

Usa \d+ (uno o más dígitos) para capturar cada entero como una única coincidencia.

Solución disponible después de 3 intentos

Ejercicio de repaso

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

Encuentra cada correo electrónico (forma simplificada: letras/dígitos/puntos/guiones bajos @ dominio). De esta forma una callback podría redactarlo como `***@dominio`.

Cargando editor...
Mostrar pista

Amplía la clase a [\w.]+ para aceptar puntos en el nombre de usuario y en el dominio.

Solución disponible después de 3 intentos

Desafío adicional

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

Coincide con cada palabra que consista en letras en el texto, de modo que pueda transformarse a mayúsculas mediante una callback.

Cargando editor...
Mostrar pista

Encuentra letras simples con [a-zA-Z]+.

Solución disponible después de 3 intentos