RegExp (রেগুলার এক্সপ্রেশন) এর শক্তিশালী বৈশিষ্ট্যগুলির মধ্যে Named Groups এবং Lookaheads/Lookbehinds অন্যতম। এই দুটি বৈশিষ্ট্য একসাথে ব্যবহার করে আরও জটিল এবং লজিক্যাল প্যাটার্ন তৈরি করা সম্ভব। চলুন, এই দুটি বৈশিষ্ট্যের বিস্তারিত আলোচনা করি এবং কিভাবে একসাথে ব্যবহার করা যায় তা দেখব।
Named Groups
Named Groups রেগুলার এক্সপ্রেশনগুলিতে গ্রুপিংয়ের জন্য একটি পদ্ধতি যা আপনাকে গ্রুপের জন্য একটি নাম দিতে সাহায্য করে। এটি রেগুলার এক্সপ্রেশনটির মেলানো অংশগুলিকে আরও স্পষ্টভাবে চিহ্নিত করতে সহায়ক, যাতে কোডের মধ্যে সেই অংশগুলোকে সহজে রেফারেন্স করা যায়।
নতুন RegExp সিমেন্টিক্সে ?<> সাইন ব্যবহার করে নামযুক্ত গ্রুপ তৈরি করা যায়। এটি ঐ অংশকে একটি নাম দেয়, যা পরবর্তীতে ম্যাচ করার পর ঐ গ্রুপের মান বের করার জন্য ব্যবহার করা যায়।
Named Groups এর সিনট্যাক্স
/(?<name>pattern)/
এখানে, name হল গ্রুপের নাম এবং pattern হল সেই অংশের প্যাটার্ন যা ম্যাচ করবে।
উদাহরণ:
let regex = /(?<username>\w+)@(?<domain>\w+\.\w+)/;
let str = "user@example.com";
let match = str.match(regex);
console.log(match.groups.username); // "user"
console.log(match.groups.domain); // "example.com"
এখানে, (?<username>\w+) গ্রুপটি username কে চিহ্নিত করে এবং (?<domain>\w+\.\w+) গ্রুপটি domain এর মান বের করে।
Lookaheads এবং Lookbehinds
Lookahead এবং Lookbehind রেগুলার এক্সপ্রেশনের বিশেষ ধরনের গ্রুপিং যা "শর্তযুক্ত" ম্যাচিংয়ের জন্য ব্যবহৃত হয়। এগুলি নিশ্চিত করতে সাহায্য করে যে, কোন প্যাটার্ন একটি নির্দিষ্ট শর্ত পূরণ করলে ম্যাচ হবে, তবে সেই শর্ত নিজে কখনোই রেজাল্টে অন্তর্ভুক্ত হয় না।
১. Positive Lookahead (?=)
Positive Lookahead নিশ্চিত করে যে, প্যাটার্নের পরবর্তী অংশটি একটি নির্দিষ্ট শর্ত পূরণ করবে।
/foo(?=bar)/
এটি "foo" কে ম্যাচ করবে যদি তার পর "bar" থাকে, তবে "bar" অংশটি ম্যাচে অন্তর্ভুক্ত হবে না।
২. Negative Lookahead (?!)
Negative Lookahead নিশ্চিত করে যে, প্যাটার্নের পরবর্তী অংশটি একটি নির্দিষ্ট শর্ত পূরণ করবে না।
foo(?!bar)
এটি "foo" কে ম্যাচ করবে যদি তার পর "bar" না থাকে।
৩. Positive Lookbehind (?<=)
Positive Lookbehind নিশ্চিত করে যে, প্যাটার্নের পূর্ববর্তী অংশটি একটি নির্দিষ্ট শর্ত পূরণ করবে।
/(?<=@)\w+/
এটি "@" এর পরবর্তী অংশকে ম্যাচ করবে, যেমন "example" যদি email address "user@example.com" থেকে "@example" পরবর্তী শব্দ বের করতে হয়।
৪. Negative Lookbehind (?<!)
Negative Lookbehind নিশ্চিত করে যে, প্যাটার্নের পূর্ববর্তী অংশটি একটি নির্দিষ্ট শর্ত পূরণ করবে না।
/(?<!@)\w+/
এটি "@" এর পূর্ববর্তী অংশ ছাড়া যেকোনো শব্দকে ম্যাচ করবে, যেমন "user" যদি email address "user@example.com" এর "@example.com" অংশ বাদ দেয়া হয়।
Named Groups এবং Lookaheads/Lookbehinds এর সমন্বয়
Named Groups এবং Lookaheads/Lookbehinds একসাথে ব্যবহার করলে আপনি আরও নির্দিষ্ট এবং শক্তিশালী প্যাটার্ন তৈরি করতে পারেন। এই দুটি বৈশিষ্ট্য একত্রে ব্যবহার করে এমন প্যাটার্ন তৈরি করা যেতে পারে যা নির্দিষ্ট শর্ত পূরণ করার সাথে সাথে বিভিন্ন গ্রুপের মান বের করে।
উদাহরণ: Lookahead এবং Named Group
ধরা যাক, আমরা এমন একটি RegExp তৈরি করতে চাই যা একটি email ঠিকানার username বের করবে, তবে এটি নিশ্চিত করবে যে ডোমেইনটি "example.com" এর সমতুল্য।
let regex = /(?<username>\w+)(?=@example\.com)/;
let str = "user@example.com";
let match = str.match(regex);
console.log(match.groups.username); // "user"
এখানে, (?<username>\w+) অংশটি username গ্রুপের জন্য এবং (?=@example\.com) অংশটি positive lookahead, যা নিশ্চিত করে যে username এর পর "@example.com" রয়েছে।
উদাহরণ: Lookbehind এবং Named Group
এখন ধরুন, আমরা একটি RegExp তৈরি করতে চাই যা একটি স্ট্রিং থেকে সঠিক মুদ্রার মান বের করবে, তবে শুধুমাত্র যদি এটি "USD" মুদ্রা কোডের পর থাকে।
let regex = /(?<=USD\s)(?<amount>\d+\.\d{2})/;
let str = "The price is USD 49.99";
let match = str.match(regex);
console.log(match.groups.amount); // "49.99"
এখানে, (?<=USD\s) অংশটি positive lookbehind, যা নিশ্চিত করে যে "USD " পূর্ববর্তী অংশে রয়েছে এবং (?<amount>\d+\.\d{2}) অংশটি named group যার মাধ্যমে আমরা মূল্য বের করছি।
সারাংশ
Named Groups এবং Lookaheads/Lookbehinds RegExp-এ দুটি অত্যন্ত শক্তিশালী বৈশিষ্ট্য যা একসাথে ব্যবহার করে আপনি আরও জটিল এবং শর্তসাপেক্ষ প্যাটার্ন তৈরি করতে পারেন। Named Groups ব্যবহার করে গ্রুপের নাম নির্ধারণ করে সহজে মান বের করতে পারেন, এবং Lookahead/Lookbehind এর মাধ্যমে শর্ত নির্ধারণ করতে পারেন যে একটি প্যাটার্ন কোথায় মেলে বা না মেলে। এই দুটি বৈশিষ্ট্য একত্রে ব্যবহৃত হলে, জটিল টেক্সট প্রসেসিং কার্যক্রম অনেক সহজ হয়ে যায়।
Read more