RegExp-এ ?: একটি বিশেষ মেটাচরিত্র যা শূন্য বা একবার একটি প্যাটার্নের মিল খুঁজে বের করার জন্য ব্যবহৃত হয়। এটি সাধারাণত প্যাটার্নের অংশকে অপশনাল (optional) হিসেবে চিহ্নিত করতে ব্যবহৃত হয়। এর মাধ্যমে, আপনি একটি চরিত্র বা সাব-প্যাটার্নের উপস্থিতি শূন্য বা একবার হতে পারে, তবে বেশি বার নয়।
?: এর ব্যবহার
?: প্যাটার্নের পর ব্যবহৃত হলে এটি একটি non-capturing group হিসেবে কাজ করে। এর মানে হল যে, এটি প্যাটার্নের মিল খুঁজে পাবে কিন্তু গ্রুপের মত রেজাল্ট ক্যাপচার করবে না (যেমন সাধারণ গ্রুপে হয়)।
সিনট্যাক্স
(?:pattern)
এখানে, (?:...) এক বা একাধিক প্যাটার্নকে গোষ্ঠীভুক্ত (group) করে, কিন্তু এটি গ্রুপের সাথে কোনো ক্যাপচার করবে না। এটি একাধিক মিল চিহ্নিত করার জন্য ব্যবহৃত হতে পারে, যেখানে আপনি গ্রুপিং চান কিন্তু ক্যাপচারিং (capturing) চান না।
উদাহরণ
উদাহরণ ১: শূন্য বা একবার "a" খুঁজে বের করা
let regex = /a?b/;
let str = "b";
console.log(regex.test(str)); // true
এখানে, a?b প্যাটার্নটি "b" স্ট্রিংয়ের সাথে মিলে যাচ্ছে, কারণ a? নির্দেশ করে যে "a" শূন্য বা একবার উপস্থিত হতে পারে। এখানে "a" অনুপস্থিত থাকলেও, "b" মেলে যাচ্ছে।
উদাহরণ ২: "a" শূন্য বা একবার এবং "b" মেলানো
let regex = /(?:a?b)/;
let str = "ab";
console.log(regex.test(str)); // true
এখানে, (?:a?b) প্যাটার্নটি "ab" স্ট্রিংয়ের সাথে মিলে যাচ্ছে, কারণ "a" শূন্য বা একবার থাকতে পারে এবং পরে "b" থাকবে।
?: এর সাথে গ্রুপিং
?: ব্যবহার করলে, এটি একটি non-capturing group তৈরি করে, যার ফলে আপনি প্যাটার্নের অংশটি গ্রুপ করতে পারবেন, তবে এটি কোনো গ্রুপের রেজাল্ট ক্যাপচার করবে না। সাধারণত গ্রুপিংয়ে প্যাটার্ন ক্যাপচার হয়, তবে ?: ব্যবহারে এটি ঘটে না।
উদাহরণ ৩: non-capturing group ব্যবহার করা
let regex = /(?:abc|def)/;
let str = "abc";
console.log(regex.test(str)); // true
এখানে, (?:abc|def) প্যাটার্নটি "abc" অথবা "def" এর মধ্যে যেকোনো একটি মেলে এবং এটি কোনো ক্যাপচার গ্রুপ তৈরি করবে না।
?: এর সাথে অন্যান্য মেটাচরিত্রের সংমিশ্রণ
?: অন্যান্য মেটাচরিত্রের সাথে মিলে আরো জটিল প্যাটার্ন তৈরি করতে সাহায্য করতে পারে। উদাহরণস্বরূপ, যদি আপনি কিছু শব্দ অপশনাল করতে চান তবে ? ব্যবহার করতে পারেন।
উদাহরণ ৪: এক বা একাধিক চরিত্র নিয়ে গ্রুপিং
let regex = /(?:abc|xyz)?123/;
let str = "123";
console.log(regex.test(str)); // true
এখানে, (?:abc|xyz)?123 প্যাটার্নটি "123" স্ট্রিংয়ের সাথে মিলে যাবে, কারণ abc বা xyz শূন্য বা একবার থাকতে পারে, এবং শেষে "123" থাকবে।
সারাংশ
?: মেটাচরিত্রটি RegExp-এ শূন্য বা একবার একটি প্যাটার্নের মিল খুঁজে বের করার জন্য ব্যবহৃত হয় এবং এটি একটি non-capturing group তৈরি করে, যার ফলে এটি মিল খুঁজে পেলেও গ্রুপের রেজাল্ট ক্যাপচার করবে না। এটি একাধিক মিলের অংশকে গ্রুপিং করতে ব্যবহৃত হয়, যখন ক্যাপচারিং প্রয়োজন নেই।
Read more