Колбек у методу replace у регуларкама JavaScript

Метод replace другим параметром може да прими не само стринг, већ и функцију-колбек, која ће се применити за сваки пронађени подударај. Сваки подстринг, који је нашла регуларка, замениће се тим што врати та функција управо за тај подстринг.

У ову функцију се могу проследити параметри: у први параметар ће се ставити пронађени стринг, у други параметар - први џеп, у трећи параметар - други џеп и тако даље - може се правити колико параметара, толико џепова у регуларном изразу.

У претпоследњи параметар ће се ставити позиција пронађеног подударања, а у последњи - цео стринг, по коме се врши претрага.

Како све ово функционише - размотрићемо на практичним примерима.

Пример

Нека је дат стринг са бројевима:

javascriptlet str = '2 3 4 5';

Хајде да заменимо те бројеве њиховим квадратима. За почетак хајде да једноставно испишемо наше бројеве редом у конзолу у функцији-колбеку:

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

Наш код ће исписати прво '2', па '3', '4' и '5'. То јест у променљиву match узастопно улазе они стрингови које је нашла регуларка.

Хајде да решимо задатак до краја - да дижемо match на квадрат и да га вратимо помоћу return. Испашће да за пронађену двојку врати 4 и двојка ће се заменити том четворком, за пронађену тројку вратиће се 9 и тројка ће се заменити том деветком - и тако даље:

javascriptlet result = str.replace(/\d+/g, function (match) {
  return match**2; 
});

console.log(result); // исписаће '4 9 16 25'

Пример

Нека сада у стрингу дате конструкције вида '2+3=':

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

Хајде да урадимо тако да после једнакостави убацимо збирове одговарајућих бројева. То јест наш стринг треба да се претвори у следећи:

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

За решавање задатка хајде опет да експериментишемо - да распоредимо први и други сабирак по одвојеним џеповима:

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

А сада да коначно решимо задатак: за сваки пронађени подстринг саберемо први и други џеп, узећемо нулти џеп (пронађени стринг, на пример '2+3='), додамо му резултат и вратимо све то преко return:

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

console.log(result);

Практични задаци

Задание 1

Дат је стринг:

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

Пронађите бројеве, који стоје у заградама и увећајте их два пута. То јест из нашег стринга треба да добијемо следећи:

javascript'aaa [4] bbb [6] ccc [24] ddd'
Задание 2

Дат је стринг:

javascriptlet str = '123 456 789';

Пронађите све бројеве и окрените им цифре у обрнутом редоследу. То јест из нашег стринга треба да добијемо следећи:

javascript'321 654 987'
Задание 3

Дат је стринг са датумима:

javascriptlet str = '31.12.2025 30.11.2024 29.10.2023';

Пронађите све датуме и претворите их у други формат тако да добијемо следећи стринг:

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