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