JavaScript ရှိ ရီဂျူလား ဖော်မြူလာများတွင် replace နည်းလမ်းထဲက callback
Replace နည်းလမ်းသည် ဒုတိယအကြောင်းအရာအဖြစ် စာကြောင်းတစ်ခုတည်းကိုသာမက callback function တစ်ခုကိုလည်း လက်ခံနိုင်ပြီး ၎င်းသည် တွေ့ရှိရသော တိုက်ဆိုင်မှုတိုင်းအတွက် အသုံးပြုမည်ဖြစ်သည်။ ရီဂျူလား ဖော်မြူလာမှ တွေ့ရှိသော စာကြောင်းခွဲတိုင်းကို ၎င်းစာကြောင်းခွဲအတွက် အဆိုပါ function မှ ပြန်လည်ပေးသော အရာဖြင့် အစားထိုးသွားမည်ဖြစ်သည်။
ဤ function ထဲသို့ parameter များ ပေးပို့နိုင်ပြီး- ပထမ parameter ထဲတွင် တွေ့ရှိသော စာကြောင်းကို ထည့်သွင်းမည်၊ ဒုတိယ parameter ထဲတွင် - ပထမ အုပ်စု (capturing group)၊ တတိယ parameter ထဲတွင် - ဒုတိယ အုပ်စု စသည်ဖြင့် ဖြစ်သည် - ရီဂျူလား ဖော်မြူလာထဲတွင် အုပ်စု အရေအတွက်ရှိသလောက် parameter အရေအတွက် ပြုလုပ်နိုင်သည်။
နောက်ဆုံးမတိုင်မီ parameter ထဲတွင် တွေ့ရှိသော တိုက်ဆိုင်မှု၏ တည်နေရာကို ထည့်သွင်းမည်ဖြစ်ပြီး နောက်ဆုံး parameter ထဲတွင် - ရှာဖွေမှုပြုလုပ်နေသော စာကြောင်းတစ်ခုလုံး ဖြစ်သည်။
ဤအရာများအားလုံး အလုပ်လုပ်ပုံကို လက်တွေ့ဥပမာများဖြင့် ဆွေးနွေးကြည့်ပါမည်။
ဥပမာ
ဂဏန်းများပါသော စာကြောင်းတစ်ခုကို ပေးထားသည်ဆိုပါစို့-
let str = '2 3 4 5';
ဤဂဏန်းများကို ၎င်းတို့၏ နှစ်ထပ်ကိန်းများအဖြစ် အစားထိုးကြည့်ပါစို့။ အစပိုင်းတွင် ကျွန်ုပ်တို့၏ ဂဏန်းများကို callback function ထဲတွင် အစဉ်လိုက် console ထဲသို့ ရိုးရိုးရှင်းရှင်း ထုတ်ကြည့်ပါစို့-
str.replace(/\d+/g, function(match) {
console.log(match);
});
ကျွန်ုပ်တို့၏ code သည် ပထမဦးစွာ '2'၊ ထို့နောက် '3'၊ '4' နှင့် '5' တို့ကို ထုတ်ပေးမည်ဖြစ်သည်။ ဆိုလိုသည်မှာ match variable ထဲသို့ ရီဂျူလား ဖော်မြူလာမှ တွေ့ရှိထားသော စာကြောင်းများ အစဉ်လိုက် ဝင်ရောက်လာမည်ဖြစ်သည်။
ပြဿနာကို အပြီးသတ်ဖြေရှင်းကြည့်ပါစို့ - 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'