JavaScript တွင် Lookahead နှင့် Lookbehind
တစ်ခါတစ်ရံ ဤကဲ့သို�့သော ပြဿနာမျိုးကို ဖြေရှင်းရန် လိုအပ်ပါသည်။
စာကြောင်း 'aaa' ကို ရှာ၍ '!' နှင့် အစားထိုးပါ။
သို့သော် 'aaa' ၏ နောက်တွင်
'x' ရှိမှသာ၊ ထို 'x' ကိုမူ
အစားမထိုးရပါ။ ဤပြဿနာကို 'တိုက်ရိုက်'
ဖြေရှင်းရန် ကြိုးစားပါက အောင်မြင်မည် မဟုတ်ပါ။
'aaax baaa'.replace(/aaax/g, '!'); // '! baaa' ကို ပြန်ပေးမည်၊ '!x baaa' ကို မျှော်လင့်ထားသည်။
Lookahead
ဤပြဿနာကို ဖြေရှင်းရန် 'x' ကို အစားမထိုးရန်
ပြောဆိုနိုင်သည့် နည်းလမ်း လိုအပ်ပါသည်။
(?= ) ဟူသော အထူးကွင်းစကွင်းပိတ်များကို
အသုံးပြု၍ ဤသို့ပြုလုပ်နိုင်ပြီး၊ ၎င်းတို့သည်
ကြည့်ရုံသာကြည့်၍ မယူဆောင်သွားပါ။
ဤကွင်းများကို အပြုသဘော Lookahead
ဟုခေါ်သည်။ အပြုသဘော - အဘယ်ကြောင့်ဆိုသော်
'x' (ကျွန်ုပ်တို့အမှု၌) ရှိရမည် -
ထိုအခါမှသာ အစားထိုးခြင်း ဖြစ်ပေါ်မည်။
ကျွန်ုပ်တို့၏ ပြဿနာကို ဖြေရှင်းရန် ဤကွင်းများကို အသုံးပြုကြည့်ပါစို့။
'aaax aaab'.replace(/aaa(?=x)/g, '!'); // '!x aaab' ကို ပြန်ပေးမည်
အပျက်သဘော Lookahead
လည်းရှိသည် - (?! ) - ၎င်းသည်
ဆန့်ကျင်ဘက်အနေနှင့် တစ်စုံတစ်ရာ
မရှိရမည်ဟု ပြောဆိုသည်။ နောက်ဥပမာတွင်၊
'aaa' ၏ နောက်တွင် 'x'
မရှိမှသာ အစားထိုးခြင်း ဖြစ်ပေါ်မည်။
'aaax aaab'.replace(/aaa(?!x)/g, '!'); // 'aaax !b' ကို ပြန်ပေးမည်
Lookbehind
အလားတူပင် အပြုသဘော Lookbehind
ရှိသည် - (?<= )။ နောက်ဥပမာတွင်
'aaa' ၏ ရှေ့တွင် 'x' ရှိမှသာ
အစားထိုးခြင်း ဖြစ်ပေါ်မည်။
'xaaa'.replace(/(?<=x)aaa/g, '!'); // 'x!' ကို ပြန်ပေးမည်
ထို့အပြင် အပျက်သဘော Lookbehind
လည်းရှိသည် - (?<! )။ နောက်ဥပမာတွင်
'aaa' ၏ ရှေ့တွင် 'x'
မရှိမှသာ အစားထိုးခြင်း ဖြစ်ပေါ်မည်။
'baaa'.replace(/(?<!x)aaa/g, '!'); // 'b!' ကို ပြန်ပေးမည်
လက်တွေ့လေ့ကျင့်ခန်းများ
ဖန်ရှင်အမည်များ ပါဝင်သော စာကြောင်းတစ်ခု ရှိသည်။
let str = 'func1() func2() func3()';
စာကြောင်းမှ ဖန်ရှင်အမည်များ ပါဝင်သော Array တစ်ခုရယူပါ။
tag တစ်ခုပါဝင်သော စာကြောင်းတစ်ခု ရှိသည်။
let str = '<a href="" class="eee" id="zzz">';
ထို tag ၏ attribute အမည်များ ပါဝင်သော Array တစ်ခုရယူပါ။
ကိန်းရှင်များ ပါဝင်သော စာကြောင်းတစ်ခု ရှိသည်။
let str = '$aaa $bbb $ccc xxxx';
ရှေ့တွင် ဒေါ်လာသင်္ကေတ ရှိသော စာကြောင်းခွဲများကို ရယူပါ။