Քոլբեք մեթոդում replace JavaScript-ի ռեգուլյար արտահայտություններում
Replace մեթոդը երկրորդ պարամետրով կարող է ընդունել ոչ միայն տող, այլև ֆունկցիա-քոլբեք, որը կկիրառվի յուրաքանչյուր գտնված համընկնման համար: Յուրաքանչյուր ենթատող, որը գտել է ռեգուլյար արտահայտությունը, կփոխարինվի այն բանով, ինչ այդ ֆունկցիան կվերադարձնի հենց այդ ենթատողի համար:
Այս ֆունկցիային կարելի է փոխանցել պարամետրեր. առաջին պարամետրի մեջ կդրվի գտնված տողը, երկրորդ պարամետրի մեջ՝ առաջին «գրպանը», երրորդ պարամետրի մեջ՝ երկրորդ «գրպանը» և այսպես շարունակ՝ կարելի է անել այնքան պարամետր, որքան «գրպան» կա ռեգուլյար արտահայտության մեջ:
Նախավերջին պարամետրի մեջ կդրվի գտնված համընկնման դիրքը, իսկ վերջինում՝ ամբողջ տողը, որի վրա կատարվում է որոնումը:
Թե ինչպես է այս ամենն աշխատում՝ կուսումնասիրենք գործնական օրինակներով:
Օրինակ
Ենթադրենք տրված է թվերով տող.
let str = '2 3 4 5';
Եկեք փոխարինենք այս թվերը նրանց քառակուսիներով: Սկզբում եկեք պարզապես արտածենք մեր թվերը հերթականությամբ կոնսոլում քոլբեք ֆունկցիայի մեջ.
str.replace(/\d+/g, function(match) {
console.log(match);
});
Մեր կոդը նախ կարտածի '2', ապա
'3', '4' և '5': Այսինքն
match փոփոխականի մեջ հաջորդաբար հայտնվում են
այն տողերը, որոնք գտել է ռեգուլյար արտահայտությունը:
Եկեք լուծենք խնդիրը մինչև վերջ՝ կբարձրացնենք
match-ը քառակուսի և կվերադարձնենք այն
return-ի օգնությամբ: Կստացվի, որ գտնված
երկուսի համար կվերադարձվի 4 և երկուսը կփոխարինվի
այդ չորսով, գտնված երեքի համար կվերադարձվի
9 և երեքը կփոխարինվի այդ իննով
- և այսպես շարունակ.
let result = str.replace(/\d+/g, function (match) {
return match**2;
});
console.log(result); // կարտածի '4 9 16 25'
Օրինակ
Ենթադրենք այժմ տողում տրված են '2+3=' տեսքի կոնստրուկցիաներ.
let str = '2+3= 4+5= 6+7=';
Եկեք անենք այնպես, որ հավասարության նշանից հետո տեղադրվեն համապատասխան թվերի գումարները: Այսինքն՝ մեր տողը պետք է վերածվի հետևյալի.
'2+3=5 4+5=9 6+7=13'
Խնդիրը լուծելու համար եկեք նորից փորձարկենք - առաջին և երկրորդ գումարելիները տարրալուծենք առանձին «գրպանների» մեջ.
str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) {
console.log(match0, match1, match2);
});
Իսկ այժմ եզրափակենք խնդրի լուծումը. յուրաքանչյուր
գտնված ենթատողի համար գումարենք առաջին և
երկրորդ «գրպանները», վերցնենք զրոյական «գրպանը» (գտնված
տողը, օրինակ '2+3='), ավելացնենք
դրան գումարը և վերադարձնենք այդ ամենը return-ի միջոցով.
let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) {
let sum = Number(match1) + Number(match2);
return match0 + sum;
});
console.log(result);
Գործնական առաջադրանքներ
Տրված է տող.
let str = 'aaa [2] bbb [3] ccc [12] ddd';
Գտեք փակագծերում գտնվող թվերը և մեծացրեք դրանք երկու անգամ: Այսինքն՝ մեր տողից պետք է ստացվի հետևյալը.
'aaa [4] bbb [6] ccc [24] ddd'
Տրված է տող.
let str = '123 456 789';
Գտեք բոլոր թվերը և շրջեք նրանց թվանշանները հակառակ հերթականությամբ: Այսինքն՝ մեր տողից պետք է ստացվի հետևյալը.
'321 654 987'
Տրված է ամսաթվերով տող.
let str = '31.12.2025 30.11.2024 29.10.2023';
Գտեք բոլոր ամսաթվերը և վերափոխեք դրանք այլ ֆորմատի այնպես, որ ստացվի հետևյալ տողը.
'2025-12-31 2024-11-30 2023-10-29'