জাভাস্ক্রিপ্ট রেগুলার এক্সপ্রেশনে বিশেষ অক্ষর এস্কেপ করা
ধরুন আমরা চাই যে বিশেষ অক্ষরটি নিজেকে নির্দেশ করবে। এর জন্য এটিকে ব্যাকস্ল্যাশ ব্যবহার করে এস্কেপ করতে হবে। আসুন উদাহরণের মাধ্যমে দেখি।
উদাহরণ
নিম্নলিখিত উদাহরণে, রেগুলার এক্সপ্রেশনের লেখক চেয়েছিলেন,
যে অনুসন্ধান প্যাটার্নটি এইরকম দেখাবে: অক্ষর
'a', তারপর প্লাস চিহ্ন '+', তারপর
অক্ষর 'x'। যাইহোক, কোডের লেখক
'+' চিহ্নটি এস্কেপ করেননি এবং তাই
আসল অনুসন্ধান প্যাটার্নটি এইরকম: অক্ষর 'a' এক বা একাধিক বার, তারপর
অক্ষর 'x':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
ফলস্বরূপ ভেরিয়েবলে নিম্নলিখিতটি লেখা হবে:
'a+x ! ! !'
উদাহরণ
এবং এখন লেখক প্লাস চিহ্নটি ব্যাকস্ল্যাশ দিয়ে এস্কেপ করেছেন।
এখন অনুসন্ধান প্যাটার্নটি সঠিকভাবে দেখাচ্ছে:
অক্ষর 'a', তারপর প্লাস চিহ্ন
'+', তারপর অক্ষর 'x'।
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
ফলস্বরূপ ভেরিয়েবলে নিম্নলিখিতটি লেখা হবে:
'! ax aax aaax'
উদাহরণ
এই উদাহরণে, প্যাটার্নটি এইরকম: অক্ষর
'a', তারপর ডট '.', তারপর
অক্ষর 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
ফলস্বরূপ ভেরিয়েবলে নিম্নলিখিতটি লেখা হবে:
'! abx azx'
উদাহরণ
পরবর্তী উদাহরণে, লেখক স্ল্যাশ এস্কেপ করতে ভুলে গেছেন এবং রেগুলার এক্সপ্রেশনটি সমস্ত সাবস্ট্রিং-এর সাথে মিলে গেছে, কারণ এস্কেপ না করা ডট যেকোনো অক্ষরকে নির্দেশ করে:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
ফলস্বরূপ ভেরিয়েবলে নিম্নলিখিতটি লেখা হবে:
'! ! !'
মন্তব্য
খেয়াল করুন যে যদি আপনি ডটের জন্য ব্যাকস্ল্যাশ ভুলে যান (যখন এটি নিজেকে নির্দেশ করা উচিত) - এটি আপনি এমনকি লক্ষ্যও নাও করতে পারেন:
'a.x'.replace(/a.x/g, '!'); // রিটার্ন করবে '!', যেমন আমরা চেয়েছিলাম
দৃশ্যত সঠিকভাবে কাজ করে (যেহেতু ডট
যেকোনো অক্ষরকে নির্দেশ করে, এমনকি একটি সাধারণ
ডট '.'-ও)। কিন্তু যদি স্ট্রিংটি পরিবর্তন করা হয়,
যেখানে প্রতিস্থাপন ঘটে - আমরা আমাদের
ভুলটি দেখতে পাব:
'a.x abx azx'.replace(/a.x/g, '!'); // রিটার্ন করবে '! ! !', কিন্তু আশা করা হয়েছিল '! abx azx'
বিশেষ অক্ষর এবং সাধারণ অক্ষরের তালিকা
যদি একটি সাধারণ অক্ষর এস্কেপ করা হয় - কিছু খারাপ হবে না - এটি তবুও নিজেকে নির্দেশ করবে। ব্যতিক্রম - সংখ্যা, সেগুলি এস্কেপ করা যায় না।
প্রায়শই সন্দেহ জাগে যে একটি নির্দিষ্ট অক্ষরটি বিশেষ কিনা। কেউ কেউ এতদূর যায় যে সব সন্দেহজনক অক্ষরগুলিকে একের পর এক এস্কেপ করে। যাইহোক, এটি একটি খারাপ অনুশীলন (রেগুলার এক্সপ্রেশনকে ব্যাকস্ল্যাশ দ্বারা জবড় করে তোলে)।
বিশেষ অক্ষরগুলি হল: $ ^ . * + ? \
/ {} [] () |
বিশেষ অক্ষর নয়: @ : , ' " ;
- _ = < > % # ~ `& !
ব্যবহারিক সমস্যা
একটি স্ট্রিং দেওয়া হয়েছে:
let str = 'a.a aba aea';
একটি রেগুলার এক্সপ্রেশন লিখুন যা স্ট্রিংটি
'a.a' খুঁজে পাবে, অন্যগুলিকে ধরে না নিয়ে।
একটি স্ট্রিং দেওয়া হয়েছে:
let str = '2+3 223 2223';
একটি রেগুলার এক্সপ্রেশন লিখুন যা স্ট্রিংটি
'2+3' খুঁজে পাবে, অন্যগুলিকে ধরে না নিয়ে।
একটি স্ট্রিং দেওয়া হয়েছে:
let str = '23 2+3 2++3 2+++3 345 567';
একটি রেগুলার এক্সপ্রেশন লিখুন যা স্ট্রিংগুলি
'2+3', '2++3', '2+++3',
খুঁজে পাবে, অন্যগুলিকে ধরে না নিয়ে (+ যেকোনো সংখ্যক হতে পারে)।
একটি স্ট্রিং দেওয়া হয়েছে:
let str = '23 2+3 2++3 2+++3 445 677';
একটি রেগুলার এক্সপ্রেশন লিখুন যা স্ট্রিংগুলি
'23', '2+3', '2++3',
'2+++3' খুঁজে পাবে, অন্যগুলিকে ধরে না নিয়ে।
একটি স্ট্রিং দেওয়া হয়েছে:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
একটি রেগুলার এক্সপ্রেশন লিখুন যা স্ট্রিংগুলি
'*q+', '*qq+', '*qqq+',
খুঁজে পাবে, অন্যগুলিকে ধরে না নিয়ে।
একটি স্ট্রিং দেওয়া হয়েছে:
let str = '[abc] {abc} abc (abc) [abc]';
একটি রেগুলার এক্সপ্রেশন লিখুন যা বর্গাকার বন্ধনীতে থাকা স্ট্রিংগুলি
খুঁজে পাবে এবং সেগুলিকে '!' দিয়ে প্রতিস্থাপন করবে।