⊗jsSpRERMC 127 of 294 menu

Callback no método replace em expressões regulares JavaScript

O método replace pode aceitar, como segundo parâmetro, não apenas uma string, mas também uma função de callback, que será aplicada para cada correspondência encontrada. Cada substring encontrada pela expressão regular será substituída pelo que essa função retornar especificamente para essa substring.

Parâmetros podem ser passados para esta função: o primeiro parâmetro receberá a string encontrada, o segundo parâmetro receberá o primeiro grupo de captura (capturing group), o terceiro parâmetro receberá o segundo grupo de captura, e assim por diante - você pode fazer quantos parâmetros quantos grupos de captura houver na expressão regular.

O penúltimo parâmetro receberá a posição da correspondência encontrada, e o último receberá a string completa na qual a busca está sendo realizada.

Veremos como tudo isso funciona com exemplos práticos.

Exemplo

Suponha uma string com números:

let str = '2 3 4 5';

Vamos substituir esses números pelos seus quadrados. Primeiro, vamos simplesmente exibir nossos números um por um no console, dentro da função de callback:

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

Nosso código exibirá primeiro '2', depois '3', '4' e '5'. Ou seja, na variável match caem sequencialmente as strings que a expressão regular encontrou.

Vamos resolver o problema completamente - vamos elevar match ao quadrado e retorná-lo usando return. O resultado será que para o número 2 encontrado, será retornado 4 e o 2 será substituído por esse 4, para o 3 encontrado será retornado 9 e o 3 será substituído por esse 9 - e assim por diante:

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

Exemplo

Suponha que agora a string contenha construções do tipo '2+3=':

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

Vamos fazer com que após o sinal de igual sejam inseridas as somas dos números correspondentes. Ou seja, nossa string deve se transformar na seguinte:

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

Para resolver a tarefa, vamos experimentar novamente - vamos colocar o primeiro e o segundo operandos em grupos de captura separados:

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

E agora vamos resolver a tarefa definitivamente: para cada substring encontrada, somaremos o primeiro e o segundo grupos de captura, pegaremos o grupo zero (a string encontrada, por exemplo '2+3='), adicionaremos a ele o resultado e retornaremos tudo isso via 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áticos

Dada a string:

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

Encontre os números entre colchetes e aumente-os em duas vezes. Ou seja, a partir de nossa string deve resultar no seguinte:

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

Dada a string:

let str = '123 456 789';

Encontre todos os números e inverta a ordem dos seus dígitos. Ou seja, a partir de nossa string deve resultar no seguinte:

'321 654 987'

Dada a string com datas:

let str = '31.12.2025 30.11.2024 29.10.2023';

Encontre todas as datas e transforme-as em outro formato para que a string resultante seja a seguinte:

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