Pages

Saturday, October 13, 2012

ජාවාස්ක්‍රිප්ට් වලින් රිජෙක්ස් - Introduction to Regular Expressions from Javascript

මොනවද මේ Regex නැත්නම් Regular Expressions කියලා කියන්නේ. පරිගණක භාෂාවක අප String Manipulation ලෙස හඳුන්වන වාක්‍ය ඛණ්ඩ සංවිධානාත්මකව හැසිරවීමේ රටාවක් ලෙස මෙය හැඳින්විය හැකිය. 

එනම් වාඛ්‍ය ඛණ්ඩ නැත්නම් Strings වල රටා හඳුනා ගෙන ඒවා අපට අවශ්‍ය කටයුතු වලට යොදා ගැනීම මෙහිදී සරල වශයෙන් සිදු කෙරේ. සරල පැහැදිලි කිරිමක් ගනිමු.

උදා 1:
පහත ආකරයේ String එකක් ගනිමු.

“Paul, Paula, Pauline, paul, Paul”

අපට අවශ්‍ය වන්නේ මෙම වචන තුලින් "Paul" යන වචනය වෙනුවට "Nimal" යන්න ආදේශ කිරීමට යැයි සිතමු. ඒ අනුව අදාල භාෂාවකින් ලියන ලද Regular Expression එකක් භාවිතයෙන් මෙම කාර්ය ඉතාම සරලව කර ගත හැකිය. ඒ අනුව යම් වචන කිහිපයක, වාක්‍යයක අකුරක්, වචනයක්, සංකේතයක් සොයා ගැනීමට අවශ්‍ය විට මෙය යොදා ගත හැකිය. බොහෝ විට String Searching වලදි Regular Expressions යොදා ගැනේ.

අද අපි භාවිතයට ගන්නේ javascript කියන පරිගණක භාෂාව (Scripting Language), මක් නිසාද යත් අද වෙබ් තාක්ෂණය ඉතාම දියුණු මට්ටමකට පැමිණ තිබෙන යුගයක්. එවන් යුගයක ඔබේ වෙබ් අඩවියේ පරිශීලකයෙකුගේ ක්‍රියාකලාපයක් අධ්‍යනය කිරීමේදී හෝ වෙනත් කටයුත්තකදි Regex භාවිතා කිරීමට අවශ්‍ය විය හැකියි.. එසේම  javascript හි Regex තරමක් පහසු ද වෙනවා. මෙම භාෂාවට අවශ්‍ය Regex සඳහා සිද්ධාන්ත කොටස් බොහොමයක් ලබා ගෙන ඇත්තේ "Pearl"නැමැති පරිගණක භාෂවෙන්. 

Regex නොමැතිව ඉහත උදාහරණයේ දැක්වෙන වචනය සොයා ගැනීමට අවශ්‍ය වූ විට වැඩි කේත ගණනක් ලිවීමට අපට සිදු වෙනවා. නමුත් Regex මඟින් එය ඉතා පහසුවෙන් කරන්නට පුලුවන්. දැන් අපි ඉහත කාර්‍ය කරන ආකාරය විමසා බලමු.

javascript හි native object එකක් වන RegExp ඔස්සේ මෙම Regex යොදා ගැනීම සිදු වේ. එමෙන්ම එය split(), match(), search() සහ replace()  යන methods වල constructor එකෙහි parameter list එකක් ලෙසද යොදා ගත හැකියි.එය ඉදිරියේදී තව දුරටත් විමසා බලමු.
Regex නිර්මාණයට ක්‍රම දෙකක් දක්වා තිබේ.

Method 1
var myRegExp = /\b’|’\b/;

Method 2
var myRegExp = new RegExp(“\\b’|’\\b”);

පළමු ක්‍රමයේදී Forward Slash (/) එකක් මුලටද අගටද යොදා මෙය Regex එකක් ලෙස හඳුන්වා දී තිබෙනවා. නැතිනම් එය variable එකක් ලෙස හඳුනා ගන්නට අපට හැකියි. නමුත් මේ ආකාර‍යට හඳුන්වා දී ඇති නිසා එය regex එකක් වනවා.
දෙවන ක්‍රමයේදී Regex Object එක හරහා නව regex එකක් සකසා ගැනීම සිදු වෙනවා. දැන් අප බලමු සරල සෙවුමක් කරන ආකාරය


var myString = "Paul, Paula, Pauline, paul, Paul";
var myRegExp = /Paul/gi;
myString = myString.replace(myRegExp, "Nimal");
alert(myString);
document.write(myString);

සම්පූර්ණ උදාහරණය

මෙය නව වෙබ් පිටුවක  script tag එකක් තුලට paste කර වෙබ් පිටුව save කර run කර බැලුවහොත් ඔබට පෙනේවි මුලින් සඳහන් Paul පමණක් ලෙස වෙනස් වී ඇති ආකාරය. නමුත් අපට අවශ්‍ය වන්නේ සියළුම වචන ආදේශ කිරීමයි. Regex වලදී සිදු වන්නේ මුලින්ම මුණ ගැසෙන සුදුසුම සෙවුම ලබා දී ප්‍රකාශණය අත් හිටුවීමයි.
එම නිසා මෙහි සඳහන් සියළුම වචන මුල සිට අගට වන තෙක් සොයා බැලීමට විශේෂ සාර්වත්‍ර ගැලපුමක්  (Global Match) අවශ්‍ය වේ.අප බලමු javascript වල තිබෙන global match කිහිපයක්.
g - මෙය ප්‍රකාශය පුරා විය හැකි සියලුම ආකාරයන් විමසා බලයි.
i - මෙය යෙදූ අපගේ සෙවුම් රටාව Case Insensitive තත්ත්වයට පත් වෙයි.එනම් Paul යන්නත් paul යන්නත් එකක් ලෙස හඳුනා ගනී. 
m - විශේෂ සංකේත සෙවීම සඳහා යොදා ගැනේ. 
Global Match එකක් යොදා අපගේ කේතය වෙනස් කර බලමු.

var myRegExp = /Paul/gi;

මේ ගොනුව කර බැලූ විට ඔබට පහත පරිදි alert box එකක් ලැබේවි.
Nimal, Nimala, Nimaline, Nimal, Nimal

සිදු වී ඇත්තේ කුමක් ද?

අපගේ සෙවුම වචන අතර මැද තිබෙන paul යන්න පවා සොයා ඒවා සියල්ල වෙනස් කර තිබේ. කෙසේද මෙය සකස් කර ගන්නේ. මෙය කිරීම සඳහා විශේෂ සංකේත භාවිතා කළ යුතු වේ. එම සංකේත පිළිබඳ තොරතුරු පහත වගුව තුලින් විමසා බැලිය හැකිය.




Lowercase සහ Uppercase අකුරු Regex සඳහා ක්‍රම දෙකකට බලපාන අතර ඒ පිළිබඳ සැලකිලිමත් වීම අවශ්‍ය වේ. Special Characters, Regex එක තුල යෙදිය යුතු වේ. අප කලින් සඳහන් කල Global Match යෙදීම කලේ Regex එකෙන් පිටතයි. නමුත් මෙහිදී අප විශේෂ සෙවුමක් කරන්නේ අදාල වචනයක් සෙවීමට නිසා එය ප්‍රකාශය ඇතුලතම යොදා ගැනීම කරයි.

දැන් බලමු මේවා යොදා ගෙන අපගේ උදාහරණය සම්පූර්ණ කිරීමට.
මෙහිදී අපට යෙදිය හැකියි ","(කොමා) සළකුන ආශ්‍රයෙන් වචනයක් අතර මැද ඇති Paul යන්න මඟ හැරීමට. 
var myRegExp = /Paul\W/gi;

නමුත් එවිට ලැබෙන ප්‍රතිඵලය ගැනද සෑහීමකට පත් වන්නට නොහැකියි. මක් නිසාද යත් එය අවසානයේ ඇති Paul යන්න වෙනස් කර නොමැති නිසා. මක් නිසාද අවසානයට කොමා සළකුණක් නොමැති නිසාය. එම නිසා අකුරු සළකුණක්(word character) සහ අකුරු නොවන සළකුණක්(non word character) අතර ඇති සීමාව යම් වචනයක අවසානය ලෙස අර්ථ ගැන්වූ විට අපට අවශ්‍ය කාර්යය සිදු කර ගත හැකි වෙයි.position character 1 වන \b සළකුණ ඒ සඳහා යොදා ගත හැක.
var myRegExp = /Paul\b/gi;
දැන් අපට අවශ්‍ය කාර්යය නිම කර අවසානයි. මෙහිදී දැක්වූයේ සරල විධාන කිහිපයක් පමණයක් පහත උදාහරණය බලන්න. එය සොයන්නේ යම් වාක්‍යක ඇත්තේ ඉලක්කම් සහ අකුරු පමණක් ද කියාය. ඒ පිළිබඳ පැහැදිලි කිරීමක් ඉදිරි ලිපියකින් බලාපොරොත්තු වන්න.

No comments:

Post a Comment