RegExp এ quantifiers (গুণক) ব্যবহার করা হয় প্যাটার্নের সাথে মিলানোর পরিমাণ বা বারের সংখ্যা নির্ধারণ করতে। গুণক দ্বারা আপনি নির্দিষ্ট করতে পারেন যে কোনো একটি ক্যারেক্টার বা প্যাটার্ন কতবার পুনরাবৃত্তি হতে পারে। এটি স্ট্রিংয়ের মধ্যে মেলানো অংশের সংখ্যা নির্ধারণে সাহায্য করে।
গুণকের ধরন
RegExp এ কিছু প্রধান গুণক রয়েছে, যা আপনার প্যাটার্নের মেলানো পরিমাণ নিয়ন্ত্রণ করে:
*(শূন্য বা একাধিক)+(এক বা একাধিক)?(শূন্য বা এক){n}(নির্দিষ্ট পরিমাণ){n,}(n বা তার বেশি){n,m}(n থেকে m পর্যন্ত)
* (শূন্য বা একাধিক)
* গুণকটি কোনো প্যাটার্নের শূন্য বা একাধিক পুনরাবৃত্তি মেলানোর জন্য ব্যবহৃত হয়। এর মানে হলো, প্যাটার্নটি অন্তত একবার অথবা কোনো সংখ্যক বার ঘটতে পারে।
সিনট্যাক্স:
let regex = /a*/;
এখানে, a* প্যাটার্নটি "a" চরিত্রের শূন্য বা একাধিক পুনরাবৃত্তির সাথে মেলে।
উদাহরণ:
let regex = /a*/;
let str = "aaa";
console.log(regex.test(str)); // true
এখানে, "aaa" স্ট্রিংয়ের মধ্যে "a*" প্যাটার্নটি মেলে, কারণ এটি তিনটি "a" এর সাথে মিলছে, কিন্তু এটি শূন্য "a" এর ক্ষেত্রেও মেলে।
+ (এক বা একাধিক)
+ গুণকটি কোনো প্যাটার্নের এক বা একাধিক পুনরাবৃত্তি মেলানোর জন্য ব্যবহৃত হয়। এর মানে হলো, প্যাটার্নটি অন্তত একবার ঘটতে হবে।
সিনট্যাক্স:
let regex = /a+/;
এখানে, a+ প্যাটার্নটি "a" চরিত্রের এক বা একাধিক পুনরাবৃত্তির সাথে মেলে।
উদাহরণ:
let regex = /a+/;
let str = "aaa";
console.log(regex.test(str)); // true
এখানে, "aaa" স্ট্রিংয়ের মধ্যে "a+" প্যাটার্নটি মেলে, কারণ এটি তিনটি "a" এর সাথে মেলে। কিন্তু যদি "a" না থাকে, তবে এটি মেলে না।
? (শূন্য বা এক)
? গুণকটি কোনো প্যাটার্নের শূন্য বা এক পুনরাবৃত্তি মেলানোর জন্য ব্যবহৃত হয়। এর মানে হলো, প্যাটার্নটি একবার বা একেবারে উপস্থিত না থাকলেও মিলতে পারে।
সিনট্যাক্স:
let regex = /a?/;
এখানে, a? প্যাটার্নটি "a" চরিত্রের শূন্য বা এক পুনরাবৃত্তির সাথে মেলে।
উদাহরণ:
let regex = /a?/;
let str = "aa";
console.log(regex.test(str)); // true
এখানে, a? প্যাটার্নটি স্ট্রিং "aa" এর মধ্যে প্রথম দুটি "a" এর সাথে মেলে এবং এটিকে শূন্য "a" এর ক্ষেত্রেও মেলে।
{n} (নির্দিষ্ট পরিমাণ)
{n} গুণকটি কোনো প্যাটার্নের নির্দিষ্ট পরিমাণ পুনরাবৃত্তি মেলানোর জন্য ব্যবহৃত হয়। এর মানে হলো, প্যাটার্নটি ঠিক n বার ঘটবে।
সিনট্যাক্স:
let regex = /a{3}/;
এখানে, a{3} প্যাটার্নটি ঠিক তিনটি "a" এর সাথে মেলে।
উদাহরণ:
let regex = /a{3}/;
let str = "aaa";
console.log(regex.test(str)); // true
এখানে, "aaa" স্ট্রিংয়ের মধ্যে a{3} প্যাটার্নটি মেলে, কারণ এতে তিনটি "a" রয়েছে।
{n,} (n বা তার বেশি)
{n,} গুণকটি কোনো প্যাটার্নের n বা তার বেশি পুনরাবৃত্তি মেলানোর জন্য ব্যবহৃত হয়। এর মানে হলো, প্যাটার্নটি অন্তত n বার ঘটবে এবং তার পরে আরও যেকোনো সংখ্যা ঘটতে পারে।
সিনট্যাক্স:
let regex = /a{2,}/;
এখানে, a{2,} প্যাটার্নটি অন্তত দুটি "a" এর সাথে মেলে, এবং আরও একাধিক "a" এর সাথে মেলাতে পারে।
উদাহরণ:
let regex = /a{2,}/;
let str = "aaaa";
console.log(regex.test(str)); // true
এখানে, "aaaa" স্ট্রিংয়ের মধ্যে a{2,} প্যাটার্নটি মেলে, কারণ এতে দুটি বা তার বেশি "a" রয়েছে।
{n,m} (n থেকে m পর্যন্ত)
{n,m} গুণকটি কোনো প্যাটার্নের n থেকে m পর্যন্ত পুনরাবৃত্তি মেলানোর জন্য ব্যবহৃত হয়। এর মানে হলো, প্যাটার্নটি n এবং m এর মধ্যে যেকোনো সংখ্যা ঘটতে পারে।
সিনট্যাক্স:
let regex = /a{2,4}/;
এখানে, a{2,4} প্যাটার্নটি দুইটি থেকে চারটি "a" এর সাথে মেলে।
উদাহরণ:
let regex = /a{2,4}/;
let str = "aaa";
console.log(regex.test(str)); // true
এখানে, "aaa" স্ট্রিংয়ের মধ্যে a{2,4} প্যাটার্নটি মেলে, কারণ এতে দুটি থেকে চারটি "a" এর মধ্যে মিলছে।
সারাংশ
Quantifiers (গুণক) RegExp-এ প্যাটার্নের পুনরাবৃত্তি সংখ্যা নির্ধারণ করতে ব্যবহৃত হয়। এগুলি ব্যবহার করে আপনি শূন্য বা একাধিক (*), এক বা একাধিক (+), শূন্য বা এক (?), নির্দিষ্ট পরিমাণ ({n}), n বা তার বেশি ({n,}), এবং n থেকে m পর্যন্ত ({n,m}) পুনরাবৃত্তি মেলাতে পারেন। এগুলির মাধ্যমে প্যাটার্নগুলো আরও জটিল এবং শক্তিশালী হয়।
RegExp-এ * মেটাচারিত্রটি খুবই গুরুত্বপূর্ণ এবং সাধারণভাবে ব্যবহৃত হয়। এটি শূন্য বা একাধিকবার একটি নির্দিষ্ট চরিত্র বা প্যাটার্নের মিল খুঁজে বের করতে ব্যবহৃত হয়। অর্থাৎ, আপনি যদি চান যে কোনো চরিত্র বা প্যাটার্নটি স্ট্রিংয়ের মধ্যে শূন্য বা তার বেশি বার উপস্থিত থাকুক, তবে * ব্যবহার করতে হবে।
* এর ব্যবহার
* মেটাচারিত্রটি তার পূর্ববর্তী চরিত্র বা গ্রুপের শূন্য বা একাধিক অনুলিপি মেলাতে ব্যবহৃত হয়।
সিনট্যাক্স:
let regex = /a*/;
এখানে, a* প্যাটার্নটি স্ট্রিংয়ে শূন্য বা একাধিক "a" এর উপস্থিতি খুঁজে বের করবে।
* এর উদাহরণ
উদাহরণ ১: যদি আপনি "a" এর শূন্য বা একাধিক কপি খুঁজতে চান, তবে a* প্যাটার্ন ব্যবহার করতে পারেন।
let regex = /a*/;
let str = "aaa";
console.log(regex.test(str)); // true
এখানে, a* প্যাটার্নটি "aaa" স্ট্রিংয়ের মধ্যে শূন্য বা একাধিক "a" খুঁজে পায়, তাই মিল পাওয়া যায়।
উদাহরণ ২: "a" এবং "b" এর মধ্যে শূন্য বা একাধিক "a" থাকতে পারে, তবে "b" থাকা উচিত।
let regex = /a*b/;
let str = "aaab";
console.log(regex.test(str)); // true
এখানে, a*b প্যাটার্নটি স্ট্রিং "aaab"-এর মধ্যে "a" এর শূন্য বা একাধিক কপি খুঁজে পায় এবং পরে "b" থাকে, ফলে মিল পাওয়া যায়।
* এবং গ্রুপিং
যখন আপনি একটি গ্রুপ তৈরি করেন, তখন * মেটাচারিত্রটি ওই গ্রুপের জন্য শূন্য বা একাধিক বার মেলানোর কাজ করবে।
উদাহরণ ৩: যদি একটি গ্রুপের মধ্যে এক বা একাধিক শব্দ থাকতে পারে, তবে * এর ব্যবহার করতে হবে।
let regex = /(ab)*c/;
let str = "abababc";
console.log(regex.test(str)); // true
এখানে, (ab)*c প্যাটার্নটি "abababc" স্ট্রিংয়ের মধ্যে "ab" এর শূন্য বা একাধিক কপি খুঁজে পায় এবং শেষে "c" থাকে, তাই মিল পাওয়া যায়।
* এর সীমাবদ্ধতা
* মেটাচারিত্রটি শূন্য বা একাধিক বার মিল খুঁজে পায়, কিন্তু এটি কিছু বিশেষ পরিস্থিতিতে কাজ না-ও করতে পারে। উদাহরণস্বরূপ, যদি আপনি স্ট্রিংয়ের শুরুতে বা শেষে কিছু মেলাতে চান, তবে * কে অন্যান্য প্যাটার্নের সাথে সংযুক্ত করতে হবে।
উদাহরণ ৪: যদি আপনি শুধুমাত্র "a" দিয়ে শুরু হওয়া স্ট্রিং চেক করতে চান, তবে * ব্যবহার করলে এটি শূন্য অবস্থায়ও মেলাবে।
let regex = /^a*/;
let str = "hello";
console.log(regex.test(str)); // true
এখানে, a* প্যাটার্নটি স্ট্রিং "hello"-এর মধ্যে শুরুতে কোনো "a" না থাকার পরেও মিলছে, কারণ * শূন্যবার "a" এর উপস্থিতি মেনে নেয়।
সারাংশ
JavaScript RegExp-এ * মেটাচারিত্রটি একটি অত্যন্ত শক্তিশালী টুল, যা শূন্য বা একাধিকবার কোনো চরিত্র বা প্যাটার্নের মিল খুঁজে বের করে। এটি বিশেষ করে তখন কাজে আসে, যখন আপনি চান একটি নির্দিষ্ট চরিত্র বা প্যাটার্ন বারবার হতে পারে, অথবা না-ও হতে পারে। * প্যাটার্নটি একাধিক কপি, গ্রুপিং, এবং স্ট্রিংয়ের শুরু বা শেষে মেলাতে ব্যবহৃত হতে পারে।
RegExp-এ + মেটাচারিত্রটি ব্যবহার করা হয় এক বা একাধিকবার কোনো চরিত্র বা প্যাটার্ন মেলানোর জন্য। এটি এমন একটি গঠন, যা চিহ্নিত করে যে, প্যাটার্নটি অন্তত একবার এবং তারপরে একাধিকবার পুনরাবৃত্তি হতে পারে।
+ এর ব্যবহার
যখন আপনি + মেটাচারিত্রটি ব্যবহার করেন, তখন এটি প্যাটার্নের একটি বা তার বেশি মিল খুঁজে বের করবে। অর্থাৎ, প্যাটার্নটি শূন্যের পরিবর্তে অন্তত একবার থাকা উচিত এবং তারপরে একাধিকবার পুনরাবৃত্তি হতে পারে।
সিনট্যাক্স:
let regex = /a+b/;
এখানে, a+b প্যাটার্নটি এক বা একাধিক "a" এর সাথে "b" এর মিল খুঁজে পাবে।
+ এর উদাহরণ
একাধিকবার "a" এর উপস্থিতি
let regex = /a+b/;
let str = "aaab";
console.log(regex.test(str)); // true
এখানে, a+b প্যাটার্নটি "aaab" স্ট্রিংয়ের মধ্যে "a" এর এক বা একাধিক পুনরাবৃত্তি অনুসরণ করে "b" এর সাথে মিলছে।
একবার "a" এর উপস্থিতি
let regex = /a+b/;
let str = "ab";
console.log(regex.test(str)); // true
এখানে, a+b প্যাটার্নটি "ab" স্ট্রিংয়ের মধ্যে "a" এর একবার উপস্থিতি অনুসরণ করে "b" এর সাথে মিলছে।
"a" এর শূন্য পুনরাবৃত্তি (পাঁচটি "b" এর পরে)
let regex = /a+b/;
let str = "bb";
console.log(regex.test(str)); // false
এখানে, a+b প্যাটার্নটি "bb" স্ট্রিংয়ের মধ্যে মিলছে না কারণ "a" এর এক বা একাধিকবার উপস্থিতি নেই।
+ এর সাথে অন্য মেটাচারিত্রের সংমিশ্রণ
আপনি + মেটাচারিত্রটি অন্য মেটাচারিত্রের সাথে ব্যবহার করে আরও জটিল প্যাটার্ন তৈরি করতে পারেন। যেমন, \d+ অর্থ "এক বা একাধিক ডিজিট"।
let regex = /\d+/;
let str = "12345";
console.log(regex.test(str)); // true
এখানে, \d+ প্যাটার্নটি এক বা একাধিক ডিজিটের (০-৯) সাথে মিলবে, এবং "12345" স্ট্রিংয়ের জন্য এটি সঠিক।
সারাংশ
RegExp-এ + মেটাচারিত্রটি একটি প্যাটার্নের এক বা একাধিকবার উপস্থিতি চিহ্নিত করে। এটি ব্যবহার করে আপনি এমন প্যাটার্ন তৈরি করতে পারেন যা এক বা একাধিক চরিত্রের পুনরাবৃত্তির জন্য মেলে, যেমন একটি বা তার বেশি অক্ষর, সংখ্যা বা বিশেষ চিহ্ন। + সাধারণত খুবই কার্যকর যখন আপনি এমন প্যাটার্নের জন্য কাজ করছেন যা একাধিক বার উপস্থিত হতে পারে।
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 তৈরি করে, যার ফলে এটি মিল খুঁজে পেলেও গ্রুপের রেজাল্ট ক্যাপচার করবে না। এটি একাধিক মিলের অংশকে গ্রুপিং করতে ব্যবহৃত হয়, যখন ক্যাপচারিং প্রয়োজন নেই।
JavaScript-এ RegExp প্যাটার্নে {n}, {n,}, এবং {n,m} মেটাচারিত্রগুলো ব্যবহৃত হয় নির্দিষ্ট সংখ্যক বার বা সংখ্যার পরিসরের মাধ্যমে চরিত্রের পুনরাবৃত্তি মেলাতে। এগুলি খুবই শক্তিশালী যখন আপনি একটি প্যাটার্নের নির্দিষ্ট পরিমাণ মিল খুঁজে বের করতে চান।
{n}: নির্দিষ্ট সংখ্যক বার মিলানো
{n} প্যাটার্নটি একটি নির্দিষ্ট চরিত্র বা প্যাটার্নের নির্দিষ্ট সংখ্যক বার পুনরাবৃত্তি খুঁজে বের করতে ব্যবহৃত হয়। এটি বলবে যে নির্দিষ্ট প্যাটার্নটি ঠিক n বার মেলে।
সিনট্যাক্স:
let regex = /a{n}/;
এখানে, a{n} প্যাটার্নটি একই চরিত্র (এখানে "a") n বার মেলে এমন স্ট্রিং খুঁজবে।
উদাহরণ:
let regex = /a{3}/;
let str = "aaab";
console.log(regex.test(str)); // true
এখানে, a{3} প্যাটার্নটি স্ট্রিং "aaab" এর মধ্যে ঠিক তিনটি "a" খুঁজে পায়, তাই এটি true রিটার্ন করবে।
{n,}: n বা তার বেশি বার মিলানো
{n,} প্যাটার্নটি একটি চরিত্র বা প্যাটার্নের n বার বা তার বেশি বার পুনরাবৃত্তি খুঁজে বের করতে ব্যবহৃত হয়। এটি বলে যে প্যাটার্নটি কমপক্ষে n বার মিলবে।
সিনট্যাক্স:
let regex = /a{n,}/;
এখানে, a{n,} প্যাটার্নটি "a" চরিত্রটিকে কমপক্ষে n বার মেলে এমন স্ট্রিং খুঁজবে।
উদাহরণ:
let regex = /a{3,}/;
let str = "aaaa";
console.log(regex.test(str)); // true
এখানে, a{3,} প্যাটার্নটি স্ট্রিং "aaaa" এর মধ্যে তিনটি বা তার বেশি "a" খুঁজে পায়, তাই এটি true রিটার্ন করবে।
{n,m}: n থেকে m বার মিলানো
{n,m} প্যাটার্নটি একটি চরিত্র বা প্যাটার্নের n থেকে m বার পুনরাবৃত্তি খুঁজে বের করতে ব্যবহৃত হয়। এটি বলে যে প্যাটার্নটি n এবং m এর মধ্যে কোনো সংখ্যক বার মেলাতে হবে।
সিনট্যাক্স:
let regex = /a{n,m}/;
এখানে, a{n,m} প্যাটার্নটি "a" চরিত্রটিকে n এবং m এর মধ্যে বার মেলে এমন স্ট্রিং খুঁজবে।
উদাহরণ:
let regex = /a{2,4}/;
let str = "aaab";
console.log(regex.test(str)); // true
এখানে, a{2,4} প্যাটার্নটি স্ট্রিং "aaab" এর মধ্যে দুইটি থেকে চারটি "a" খুঁজে পায়, তাই এটি true রিটার্ন করবে।
সারাংশ
{n}, {n,}, এবং {n,m} মেটাচারিত্রগুলো RegExp-এ চরিত্র বা প্যাটার্নের পুনরাবৃত্তি নিয়ন্ত্রণ করতে ব্যবহৃত হয়:
{n}: একটি চরিত্র বা প্যাটার্নকে ঠিক n বার মেলাতে ব্যবহৃত হয়।{n,}: একটি চরিত্র বা প্যাটার্নকে কমপক্ষে n বার মেলাতে ব্যবহৃত হয়।{n,m}: একটি চরিত্র বা প্যাটার্নকে n থেকে m বার মেলাতে ব্যবহৃত হয়।
এই মেটাচারিত্রগুলির সাহায্যে আপনি স্ট্রিংয়ের মধ্যে নির্দিষ্ট সংখ্যক চরিত্র বা প্যাটার্ন খুঁজে বের করতে পারেন।
RegExp-এ greedy এবং lazy matching দুটি গুরুত্বপূর্ণ ধারণা। এগুলি কীভাবে মেলানো হয় এবং কতটুকু স্ট্রিংকে অন্তর্ভুক্ত করা হয়, তা নির্ধারণ করে। সঠিকভাবে ব্যবহৃত হলে, এই পদ্ধতিগুলি স্ট্রিং ম্যানিপুলেশনকে আরো শক্তিশালী এবং নির্ভুল করতে পারে।
Greedy Matching
Greedy matching হল একটি RegExp আচরণ যেখানে প্যাটার্নটি যতটা সম্ভব বেশি স্ট্রিং মেলানোর চেষ্টা করে। অন্য words, এটি এমন একটি প্যাটার্ন যা যতটা সম্ভব বড় স্ট্রিং পর্যন্ত মেলে, যতক্ষণ না পুরো প্যাটার্নটি মেলে।
গ্রীডি প্যাটার্নের জন্য সাধারণত *, +, এবং {n,m} মেটাচারিত্র ব্যবহৃত হয়। এগুলি প্যাটার্নের অংশ হিসেবে যত বেশি সম্ভব মেলানোর চেষ্টা করে।
উদাহরণ:
let regex = /<.*>/;
let str = "<div>Hello</div><span>World</span>";
console.log(regex.test(str)); // true
এখানে, /.*>/ প্যাটার্নটি গ্রীডি কারণ এটি < এবং > এর মধ্যে যতটা সম্ভব বড় অংশ মেলানোর চেষ্টা করে, অর্থাৎ এটি পুরো "div>Hello</div><span>World</span>" অংশটিকে মেলে। এখানে, স্ট্রিংয়ের প্রথম > চিহ্নে মিলেছে, কিন্তু এটি শুধু প্রথম < থেকে শেষ > পর্যন্ত পুরো অংশটি ধরেছে।
Lazy Matching
Lazy matching (বা non-greedy matching) হল একটি RegExp আচরণ যেখানে প্যাটার্নটি যতটা কম স্ট্রিং মেলানোর চেষ্টা করে, যতটুকু প্যাটার্ন মেলা সম্ভব। অর্থাৎ, এটি শুধু প্রথম সম্ভব মিলের পরে স্ট্রিংয়ের পরবর্তী অংশ মেলানোর চেষ্টা করে।
লেজি প্যাটার্নের জন্য *?, +?, এবং {n,m}? মেটাচারিত্র ব্যবহার করা হয়। এগুলি প্যাটার্নের অংশ হিসেবে কম সংখ্যক চরিত্র মেলানোর চেষ্টা করে, যাতে দ্রুত মেলানো যায়।
উদাহরণ:
let regex = /<.*?>/;
let str = "<div>Hello</div><span>World</span>";
console.log(regex.test(str)); // true
এখানে, /.*?>/ প্যাটার্নটি লেজি কারণ এটি < এবং > এর মধ্যে যতটা কম অংশ মেলানোর চেষ্টা করে। এটি প্রথম <div>Hello</div> এর মধ্যে প্রথম > চিহ্নের সাথে মিলবে এবং পরে আরেকটি <span> অংশ মেলাতে যাবে। এতে স্ট্রিংয়ের প্রথম > সঠিক জায়গায় মিলছে, কিন্তু পুরো স্ট্রিংটি মিলছে না।
Greedy vs Lazy Matching এর পার্থক্য
- Greedy matching স্ট্রিংয়ের মধ্যে যতটা সম্ভব বড় অংশ মেলানোর চেষ্টা করে। এটি সাধারণত পুরো প্যাটার্ন পর্যন্ত মেলে।
- উদাহরণ:
.*- যতটুকু সম্ভব অক্ষর মেলাবে, যতক্ষণ না পুরো প্যাটার্ন মেলে।
- উদাহরণ:
- Lazy matching স্ট্রিংয়ের মধ্যে যতটুকু ছোট অংশ মেলানোর চেষ্টা করে, যা প্রথম সঠিক মিল পাওয়ার পর থেমে যায়।
- উদাহরণ:
.*?- যতটুকু সম্ভব অক্ষর মেলাবে, কিন্তু প্রথম মিল পাওয়ার পর থেমে যাবে।
- উদাহরণ:
সারাংশ
Greedy matching এবং lazy matching হল RegExp-এর দুটি গুরুত্বপূর্ণ ধারণা, যেখানে গ্রীডি প্যাটার্ন যতটা বেশি সম্ভব মেলে, আর লেজি প্যাটার্ন যতটা কম সম্ভব মেলে। গ্রীডি প্যাটার্ন স্ট্রিংয়ের বড় অংশ মেলাতে আগ্রহী, যেখানে লেজি প্যাটার্ন প্রথম সঠিক মিল খুঁজে পাওয়ার পরে থেমে যায়।
Read more