Քոլբեք մեթոդում 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'