⊗jsSpRERMC 127 of 294 menu

Callback en el método replace de expresiones regulares en JavaScript

El método replace puede tomar como segundo parámetro no solo una cadena, sino también una función callback, que se aplicará para cada coincidencia encontrada. Cada subcadena encontrada por la expresión regular será reemplazada por lo que devuelva esta función para esa subcadena en particular.

A esta función se le pueden pasar parámetros: en el primer parámetro se colocará la cadena encontrada, en el segundo parámetro - el primer grupo de captura (capturing group), en el tercer parámetro - el segundo grupo de captura y así sucesivamente - se pueden hacer tantos parámetros como grupos de captura tenga la expresión regular.

En el penúltimo parámetro se colocará la posición de la coincidencia encontrada, y en el último - toda la cadena sobre la que se realiza la búsqueda.

Cómo funciona todo esto - lo veremos con ejemplos prácticos.

Ejemplo

Supongamos que tenemos una cadena con números:

let str = '2 3 4 5';

Reemplacemos estos números por sus cuadrados. Para empezar, simplemente mostremos nuestros números uno por uno en la consola en la función callback:

str.replace(/\d+/g, function(match) { console.log(match); });

Nuestro código mostrará primero '2', luego '3', '4' y '5'. Es decir, en la variable match entran secuencialmente las cadenas que encontró la expresión regular.

Resolvamos el problema completamente - elevaremos match al cuadrado y lo devolveremos con return. Resultará que para el 2 encontrado se devolverá 4 y el 2 se reemplazará por este 4, para el 3 encontrado se devolverá 9 y el 3 se reemplazará por este 9 - y así sucesivamente:

let result = str.replace(/\d+/g, function (match) { return match**2; }); console.log(result); // mostrará '4 9 16 25'

Ejemplo

Supongamos ahora que en la cadena hay construcciones del tipo '2+3=':

let str = '2+3= 4+5= 6+7=';

Hagamos que después del igual se inserten las sumas de los números correspondientes. Es decir, nuestra cadena debería transformarse en lo siguiente:

'2+3=5 4+5=9 6+7=13'

Para resolver el problema, experimentemos nuevamente - descompongamos el primer y segundo sumando en grupos de captura separados:

str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) { console.log(match0, match1, match2); });

Y ahora resolvamos el problema definitivamente: para cada subcadena encontrada sumemos el primer y segundo grupo de captura, tomemos el grupo cero (la cadena encontrada, por ejemplo '2+3='), agreguemos a este el resultado y devolvamos todo esto mediante return:

let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) { let sum = Number(match1) + Number(match2); return match0 + sum; }); console.log(result);

Problemas prácticos

Sea la cadena:

let str = 'aaa [2] bbb [3] ccc [12] ddd';

Encuentre los números entre corchetes y auméntelos al doble. Es decir, de nuestra cadena debería resultar lo siguiente:

'aaa [4] bbb [6] ccc [24] ddd'

Sea la cadena:

let str = '123 456 789';

Encuentre todos los números y invierta sus dígitos en orden inverso. Es decir, de nuestra cadena debería resultar lo siguiente:

'321 654 987'

Sea la cadena con fechas:

let str = '31.12.2025 30.11.2024 29.10.2023';

Encuentre todas las fechas y transfórmelas a otro formato para que se obtenga la siguiente cadena:

'2025-12-31 2024-11-30 2023-10-29'
esnltrenaz