JavaScript এর RegExp এ Groups ব্যবহার করে একাধিক অংশকে গ্রুপ হিসেবে আখ্যায়িত করা হয়। গ্রুপিং স্ট্রিংয়ের একটি নির্দিষ্ট অংশকে একটি ইউনিট হিসেবে ধারণ করে এবং পরে সেটি থেকে ডেটা বের করার জন্য খুবই কার্যকর।
গ্রুপ দুটি ধরনের হতে পারে:
- Capturing Groups (ধরা গ্রুপ)
- Non-capturing Groups (অধরা গ্রুপ)
Capturing Groups (ধরা গ্রুপ)
Capturing Groups বা ধরা গ্রুপ প্যাটার্নের মধ্যে বন্ধনী () ব্যবহার করে তৈরি করা হয় এবং এটি স্ট্রিংয়ের একটি অংশ ধরে রাখে, যা পরে backreference হিসেবে ব্যবহার করা যায়। এটি মূলত একটি ম্যাচের অংশকে আলাদাভাবে এক্সট্রাক্ট (extract) বা রেফার (refer) করতে ব্যবহৃত হয়।
Capturing Groups এর সিনট্যাক্স
let regex = /(abc)/;
let str = "abc def";
let result = regex.exec(str);
console.log(result[1]); // "abc"
এখানে, /(abc)/ প্যাটার্নে abc কে একটি গ্রুপ হিসেবে ধরেছে, এবং exec() মেথডে ফলস্বরূপ প্রথম ম্যাচ হিসেবে এটি ধরা পড়েছে। result[1] দিয়ে আমরা ধরা গ্রুপের মানটি বের করেছি।
একাধিক Capturing Groups
একাধিক গ্রুপের ক্ষেত্রে, প্রতিটি গ্রুপ আলাদাভাবে স্টোর করা হয়। আপনি প্রতিটি গ্রুপের মান বের করতে পারেন।
let regex = /(\d+)-(\d+)/;
let str = "2024-12";
let result = regex.exec(str);
console.log(result[1]); // "2024"
console.log(result[2]); // "12"
এখানে, (\d+) দুটি গ্রুপ তৈরি করছে — একটি বছরের জন্য এবং অন্যটি মাসের জন্য। result[1] এবং result[2] দিয়ে যথাক্রমে বছর এবং মাস বের করা হয়েছে।
Non-capturing Groups (অধরা গ্রুপ)
Non-capturing Groups বা অধরা গ্রুপ স্ট্রিংয়ের একটি অংশকে গ্রুপের মধ্যে রাখে কিন্তু সেটি ধরার জন্য কোনো রেফারেন্স (backreference) তৈরি করে না। সাধারণত এই ধরনের গ্রুপ ব্যবহৃত হয় যখন আপনি শুধুমাত্র প্যাটার্নে গ্রুপিং করতে চান, কিন্তু ওই গ্রুপ থেকে কোনো মান বের করতে চান না।
Non-capturing Groups তৈরি করতে (?:) সিনট্যাক্স ব্যবহার করা হয়। এখানে ?: নির্দেশ করে যে এটি একটি গ্রুপ হলেও তা ধরা হবে না।
Non-capturing Groups এর সিনট্যাক্স
let regex = /(?:abc)/;
let str = "abc def";
let result = regex.exec(str);
console.log(result); // ["abc"]
এখানে, (?:abc) একটি Non-capturing Group তৈরি করেছে, কিন্তু এতে কোনো আলাদা ম্যাচ বা রেফারেন্স তৈরি হয়নি। এর ফলে, যখন exec() মেথড ব্যবহার করা হবে, তখন এটি পুরো স্ট্রিং ম্যাচ করবে, কিন্তু কোনো আলাদা গ্রুপের ডেটা থাকবে না।
Non-capturing Groups এর ব্যবহার
Non-capturing Groups সাধারণত তখন ব্যবহৃত হয় যখন আপনি প্যাটার্নে গ্রুপিং করতে চান কিন্তু গ্রুপ থেকে কোনো মান বের করতে চান না। এটি performance optimization এর জন্যও ব্যবহার করা যায় কারণ এটি অতিরিক্ত তথ্য তৈরি করে না।
let regex = /(?:abc|def)/;
let str = "abc def";
let result = regex.exec(str);
console.log(result[0]); // "abc"
এখানে, (?:abc|def) প্যাটার্নটি "abc" বা "def" এর সাথে মিলবে, কিন্তু কোন আলাদা গ্রুপ হিসেবে কিছু স্টোর হবে না।
Capturing Groups এবং Non-capturing Groups এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Capturing Groups | Non-capturing Groups |
|---|---|---|
| সিনট্যাক্স | (abc) | (?:abc) |
| ম্যাচের মান রাখা | হ্যাঁ, গ্রুপের মান সংরক্ষণ করা হয় | না, গ্রুপের মান সংরক্ষণ করা হয় না |
| ব্যাকরেফারেন্স (backreference) | হ্যাঁ | না |
| পারফরমেন্স | কম পারফরমেন্স (যেহেতু গ্রুপের মান সংরক্ষণ করা হয়) | ভালো পারফরমেন্স (গ্রুপের মান সংরক্ষণ করা হয় না) |
সারাংশ
Capturing Groups এবং Non-capturing Groups JavaScript এর RegExp এর দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য। যেখানে Capturing Groups স্ট্রিংয়ের নির্দিষ্ট অংশগুলো ধরে রাখে এবং পরে সেগুলোর মান বের করার সুযোগ দেয়, সেখানে Non-capturing Groups শুধু গ্রুপিংয়ের জন্য ব্যবহৃত হয় এবং এতে কোনো রেফারেন্স তৈরি করা হয় না। Non-capturing Groups পারফরমেন্স অপটিমাইজেশন এবং জটিল প্যাটার্নের জন্য বেশ কার্যকর।
Read more