ජාවාස්ක්රිප්ට් රෙගුලර් එක්ස්ප්රෙශන් වල ධනාත්මක හා ඍණාත්මක පෙරදැකීම්
සමහර විට මේ වගේ ගැටලුවක් විසඳන්න අවශ්ය වෙනවා: තන්ය
පේළිය 'aaa' සොයාගෙන ඒක '!' දිහාවට
වෙනස් කරන්න,
නමුත් ඒ වෙලාවට පමණක් 'aaa' ඉදිරියෙන්
'x' තියෙනවා නම්, ඒ වගේම ඒ 'x' එක
එහෙම තියෙනවා නම් වෙනස් කරන්න එපා. අපි හිතනවා වගේ ගැටලුව
'පිරිසිදුවම' විසඳන්න ගියොත් අපිට කිසිම දෙයක්
හොයාගන්න බෑ:
'aaax baaa'.replace(/aaax/g, '!'); // '! baaa' එනවා, නමුත් අපිට ඕනෙ '!x baaa'
ඉදිරි පෙරදැකීම
ගැටලුව විසඳන්න ඕනෙම ආකාරයක් කියන්න,
'x' වෙනස් කරන්න එපා කියලා. කරන්නෙ
ඒක විශේෂ වරහන් (?= ) භාවිතා කරලා,
ඒවා බලපුවට විතරයි, ගත්තේ නෑ.
මේ වරහන් හඳුන්වන්නෙ ධනාත්මක ඉදිරි පෙරදැකීම
කියලා. ධනාත්මක - හේතුව තමයි 'x'
(අපේ අවස්ථාවේ) තිබිය යුතුයි - ඒ විට පමණක්
වෙනස් කිරීම සිදු වෙනවා.
අපි අපේ ගැටලුව විසඳන්න මේ වරහන් භාවිතා කරමු:
'aaax aaab'.replace(/aaa(?=x)/g, '!'); // '!x aaab' එනවා
තියෙනවා ඍණාත්මක ඉදිරි පෙරදැකීම
- (?! ) - ඒක, අනෙක් අතට, කියනවා
කිසිම දෙයක් තිබිය යුතු නෑ කියලා. ඊළඟ උදාහරණයේ,
වෙනස් කිරීම සිදු වෙන්නෙ, පමණක් 'aaa'
ඉදිරියෙන් නොතිබුණොත් 'x':
'aaax aaab'.replace(/aaa(?!x)/g, '!'); // 'aaax !b' එනවා
පසුපස පෙරදැකීම
ඒ හා සමානවම තියෙනවා ධනාත්මක පසුපස පෙරදැකීම
- (?<= ). ඊළඟ
උදාහරණයේ වෙනස් කිරීම සිදු වෙන්නෙ, පමණක් 'aaa'
ඉදිරියෙන් 'x' තිබුණොත්:
'xaaa'.replace(/(?<=x)aaa/g, '!'); // 'x!' එනවා
ඒ වගේම තියෙනවා ඍණාත්මක පසුපස පෙරදැකීම
- (?<! ). ඊළඟ උදාහරණයේ වෙනස් කිරීම
සිදු වෙන්නෙ, පමණක් 'aaa'
ඉදිරියෙන් 'x' නොතිබුණොත්:
'baaa'.replace(/(?<!x)aaa/g, '!'); // 'b!' එනවා
ප්රායෝගික ගැටළු
ෆංක්ෂන් නම් අඩංගු පේළියක් දී ඇත:
let str = 'func1() func2() func3()';
පේළියෙන් ෆංක්ෂන් නම් ඇරෙක්ෂනයක් ලබාගන්න.
ටැගයක් සමඟ පේළියක් දී ඇත:
let str = '<a href="" class="eee" id="zzz">';
මෙම ටැගයේ ගුණාංග නම් ඇරෙක්ෂනයක් ලබාගන්න.
විචල්ය සමඟ පේළියක් දී ඇත:
let str = '$aaa $bbb $ccc xxxx';
ඉදිරියෙන් ඩොලර් සංකේතය ඇති උපපේළි ලබාගන්න.