JavaScript এর RegExp এ Backreferences এবং Recursion দুটি শক্তিশালী বৈশিষ্ট্য, যা প্যাটার্নের মধ্যে পূর্ববর্তী গ্রুপের মান পুনরায় ব্যবহার করতে এবং পুনরাবৃত্তি তৈরি করতে সাহায্য করে। এগুলি বিশেষভাবে জটিল প্যাটার্নের জন্য উপকারী, যেমন প্যাটার্নের মধ্যে একই বিষয় বা অংশের পুনরাবৃত্তি এবং তার পরবর্তী মিল খুঁজে বের করা।
Backreferences
Backreference RegExp-এ পূর্বে গ্রুপ করা অংশগুলির মান পুনরায় ব্যবহার করতে ব্যবহৃত হয়। এটি গ্রুপের মান ব্যবহার করে স্ট্রিংয়ের এমন অংশ খুঁজে বের করতে সাহায্য করে, যা পূর্ববর্তী গ্রুপের মানের সাথে মেলে।
Backreference সাধারণত \n সিনট্যাক্স ব্যবহার করে গ্রুপের মানের রেফারেন্স তৈরি করা হয়, যেখানে n হল গ্রুপের ইনডেক্স।
Backreference এর সিনট্যাক্স
let regex = /(abc)\1/;
এখানে, (abc) একটি গ্রুপ তৈরি করেছে, এবং \1 হল প্রথম গ্রুপের মানের রেফারেন্স, অর্থাৎ এটি একই abc স্ট্রিংয়ের পুনরাবৃত্তি খুঁজবে।
Backreference এর উদাহরণ
ধরা যাক, আমরা একটি প্যাটার্ন তৈরি করতে চাই যেখানে দুটি শব্দ একই হতে হবে, যেমন "hello hello":
let regex = /(hello)\s\1/;
let str = "hello hello";
console.log(regex.test(str)); // true
এখানে, (hello) গ্রুপটি প্রথম "hello" শব্দটিকে ধরেছে, এবং \1 দ্বারা দ্বিতীয় "hello" শব্দের সাথে মেলে। এর ফলে, "hello hello" স্ট্রিংটি মিলছে।
Backreference এর আরও উদাহরণ
এটি একটি উদাহরণ যেখানে দুটি সংখ্যার প্যাটার্ন একই হতে হবে:
let regex = /(\d{2})-(\d{2})-\1-\2/;
let str = "12-34-12-34";
console.log(regex.test(str)); // true
এখানে, (\d{2})-(\d{2})-\1-\2 প্যাটার্নটি প্রথম দুটি সংখ্যাকে ধরে এবং তাদের পুনরাবৃত্তি খুঁজে বের করে, যেমন "12-34-12-34"।
Recursion
Recursion RegExp-এ একটি বিশেষ ক্ষমতা যা গ্রুপকে নিজেই পুনরায় কল (call) করতে সক্ষম করে। এটি জটিল প্যাটার্ন যেমন ভারি স্ট্রাকচার বা পুনরাবৃত্তি চিহ্নিত করতে ব্যবহৃত হয়।
JavaScript এর RegExp সাধারণত Recursion সাপোর্ট করে না, তবে কিছু RegExp ইঞ্জিন (যেমন PCRE বা Perl Compatible Regular Expressions) এতে সক্ষম। তবে, recursive patterns এর জন্য JavaScript-এ সাধারণভাবে কোনো সরাসরি সমর্থন নেই, কিন্তু কিছু workaround বা ভিন্ন পদ্ধতি ব্যবহার করে আপনি এটি সিমুলেট করতে পারেন।
Recursion এর সম্ভাব্য ব্যবহার
ধরা যাক, আপনি একটি স্ট্রিংয়ের মধ্যে nested প্যারেন্টেসিস খুঁজতে চান, যেমন ((()))। আপনি যদি RegExp এর মাধ্যমে recursion সমাধান করতে চান, তবে JavaScript এ এটি সরাসরি সম্ভব নয়। তবে কিছু বিশেষ ক্ষেত্রে প্যাটার্নগুলো ব্যবহার করে এমন কিছু মিল পাওয়া যেতে পারে।
Backreferences এবং Recursion এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Backreferences | Recursion |
|---|---|---|
| কাজ কী | পূর্ববর্তী গ্রুপের মান পুনরায় ব্যবহার করা | একটি গ্রুপ নিজেই পুনরায় কল করা |
| সাপোর্ট | JavaScript RegExp এ সাপোর্টেড | JavaScript RegExp এ সরাসরি সাপোর্টেড নয় |
| উদাহরণ | \1 বা \2 দ্বারা গ্রুপের মান পুনরায় ব্যবহার করা | স্ট্রাকচার বা ডাটা পুনরাবৃত্তির জন্য ব্যবহার করা |
| সাধারণ ব্যবহার | দুটি মিলিত অংশের মধ্যে সম্পর্ক খুঁজতে | nested বা পুনরাবৃত্তির জন্য ব্যবহৃত |
সারাংশ
Backreferences RegExp-এ পূর্বে গ্রুপ করা অংশের মান পুনরায় ব্যবহার করতে সাহায্য করে, যা কোডে মিলের পুনরাবৃত্তি খুঁজে বের করার জন্য খুবই কার্যকর। এটি \n ব্যবহার করে গ্রুপের মানের রেফারেন্স তৈরি করে এবং তারপর সেটির সাথে মিল খুঁজে বের করতে পারে। অপরদিকে, Recursion RegExp-এ কোনো গ্রুপকে নিজেই পুনরায় কল করতে সক্ষম হয়, তবে JavaScript-এ এটি সরাসরি সমর্থিত নয়। Backreferences ব্যবহার করে আমরা জটিল প্যাটার্নে মিল খুঁজে বের করতে পারি, যখন Recursion কোনো পুনরাবৃত্তি বা nested স্ট্রাকচার চিহ্নিত করার জন্য ব্যবহার করা হয়।
Backreference RegExp (Regular Expressions)-এ একটি শক্তিশালী বৈশিষ্ট্য যা পূর্বে ধরা গ্রুপের মান পুনরায় ব্যবহার করতে দেয়। সহজভাবে বললে, যখন আপনি একটি স্ট্রিংয়ে নির্দিষ্ট একটি অংশকে গ্রুপ হিসেবে ধরেন, তখন সেই গ্রুপের মান backreference এর মাধ্যমে পরে আবার ব্যবহার করতে পারেন। এটি তখন খুবই উপকারী, যখন আপনি একটি প্যাটার্নে পুনরাবৃত্তি বা মিল চান যা পূর্বে মেলা অংশের সাথে সম্পর্কিত।
Backreference এর কাজের পদ্ধতি
RegExp-এ, গ্রুপগুলো () দিয়ে তৈরি করা হয়। গ্রুপগুলোর পর, আপনি backreference ব্যবহার করে সেই গ্রুপগুলির মান পুনরায় মেলাতে পারেন।
Backreference ব্যবহার করতে \1, \2, \3 ইত্যাদি সিনট্যাক্স ব্যবহার করা হয়:
\1– প্রথম গ্রুপের মান\2– দ্বিতীয় গ্রুপের মান\3– তৃতীয় গ্রুপের মান
এভাবে, আপনি যেই গ্রুপটি প্রথমে ধরেছেন, সেটির মান পরবর্তীতে backreference দিয়ে প্যাটার্নে পুনরায় ব্যবহার করতে পারবেন।
Backreference এর উদাহরণ
ধরা যাক, আমরা একটি প্যাটার্ন তৈরি করতে চাই যেখানে দুটি অংশে একই মান মেলাতে হবে। এখানে প্রথম গ্রুপটি ধরার পর, দ্বিতীয় গ্রুপটি backreference দিয়ে আগের গ্রুপের মানের সাথে মিলানো হবে।
let regex = /(\d+)-\1/;
let str = "123-123";
console.log(regex.test(str)); // true
এখানে, (\d+) প্রথম গ্রুপ হিসেবে একটি সংখ্যা ধরেছে এবং \1 দিয়ে আমরা প্রথম গ্রুপের মান আবার দ্বিতীয় অংশের সাথে মিলিয়েছি। ফলে, স্ট্রিং "123-123" এই প্যাটার্নের সাথে মিলে যায়।
একাধিক Backreference ব্যবহার
আপনি একাধিক backreferences ব্যবহার করে একাধিক গ্রুপের মান মিলিয়ে আরও জটিল প্যাটার্ন তৈরি করতে পারেন। উদাহরণস্বরূপ, একসাথে তিনটি অংশের পুনরাবৃত্তি যাচাই করতে চাইলে:
let regex = /(\w+)-\1-\1/;
let str = "hello-hello-hello";
console.log(regex.test(str)); // true
এখানে, (\w+) প্রথম গ্রুপটি ধরেছে এবং \1-\1 দিয়ে আমরা একই মান তিনবার মেলানোর চেষ্টা করেছি। ফলে, স্ট্রিং "hello-hello-hello" সফলভাবে এই প্যাটার্নের সাথে মিলেছে।
Backreference এর ব্যবহার: ইমেল যাচাই
ধরা যাক, আপনি একটি ইমেল ঠিকানা যাচাই করতে চান, যেখানে প্রথম অংশ (username) এবং ডোমেন অংশে একই মান থাকতে হবে। Backreference দিয়ে এটি সহজেই করা যেতে পারে:
let regex = /^([a-zA-Z0-9]+)@(\1)\.com$/;
let str = "test@test.com";
console.log(regex.test(str)); // true
এখানে:
([a-zA-Z0-9]+)প্রথম গ্রুপ হিসেবেtestধরেছে।\1দিয়ে আমরা সেইtestকে পুনরায় ডোমেন অংশে মিলাতে চাচ্ছি।- ফলে,
"test@test.com"স্ট্রিং সফলভাবে মিলে যায়।
Backreference এর সীমাবদ্ধতা
- গ্রুপ সীমাবদ্ধতা: RegExp-এ গ্রুপের সংখ্যা সীমিত থাকে, এবং আপনি প্রতিটি গ্রুপের জন্য backreference ব্যবহার করতে পারেন। বেশিরভাগ RegExp ইঞ্জিনে গ্রুপ সংখ্যা সাধারণত 9-10 এর মধ্যে সীমাবদ্ধ থাকে।
- পারফরমেন্স: যখন আপনি অনেক গ্রুপ এবং backreference ব্যবহার করেন, তখন প্যাটার্নটি জটিল হতে পারে, যা পারফরমেন্সের উপর কিছুটা প্রভাব ফেলতে পারে।
- নির্দিষ্ট অংশের মিল: Backreference শুধুমাত্র একটি গ্রুপের মানকে পুনরায় ব্যবহার করতে পারে, তাই আপনি একাধিক গ্রুপের মধ্যে সম্পর্কযুক্ত মেলানোর জন্য আরও জটিল প্যাটার্ন ব্যবহার করতে হবে।
সারাংশ
Backreference RegExp এর একটি বৈশিষ্ট্য যা পূর্বে ধরা গ্রুপের মানকে পুনরায় মেলানোর জন্য ব্যবহৃত হয়। এটি \1, \2, \3 ইত্যাদি সিনট্যাক্স ব্যবহার করে পূর্ববর্তী গ্রুপের মানের সঙ্গে মিলাতে সাহায্য করে। এটি বিশেষত যখন আপনি একটি স্ট্রিংয়ের মধ্যে পুনরাবৃত্তি বা সম্পর্কিত অংশের মিল খুঁজতে চান, তখন অত্যন্ত কার্যকর।
Backreference হল RegExp এর একটি শক্তিশালী বৈশিষ্ট্য যা পূর্বে ধরা গ্রুপের মান পুনরায় ব্যবহার করতে দেয়। এটি আপনার প্যাটার্নে আগে যে অংশটি মিলেছে, সেই অংশটি আবার পরবর্তীতে মেলানোর জন্য ব্যবহৃত হয়। Backreference ব্যবহার করে আপনি স্ট্রিংয়ের মধ্যে পূর্ববর্তী গ্রুপের মানটি মেলাতে পারেন।
Backreference এর সিনট্যাক্স
Backreference এর জন্য আপনি গ্রুপের নম্বর ব্যবহার করেন, যেমন \1, \2, \3 ইত্যাদি, যেখানে \1 প্রথম গ্রুপ, \2 দ্বিতীয় গ্রুপ, এবং এভাবে পরবর্তী গ্রুপের জন্য ব্যবহৃত হয়।
উদাহরণ: Backreference ব্যবহার
ধরা যাক, আমরা একটি প্যাটার্ন তৈরি করতে চাই যেখানে দুটি অংশের মধ্যে প্রথম অংশটি এবং দ্বিতীয় অংশটি একই হতে হবে। আমরা একটি গ্রুপে প্রথম অংশটি ধরব এবং backreference দিয়ে সেটি পরবর্তী অংশের জন্য মিল করাবো।
let regex = /(\d+)-\1/;
let str = "123-123";
console.log(regex.test(str)); // true
এখানে, (\d+) প্রথম গ্রুপের মাধ্যমে সংখ্যা ধরেছে এবং \1 দিয়ে আমরা আগের গ্রুপের (যেটি \d+ ছিল) একই মান মেলানোর চেষ্টা করছি। স্ট্রিং 123-123 এখানে সফলভাবে মিলেছে কারণ প্রথম সংখ্যাটি দ্বিতীয় সংখ্যার সঙ্গে একরকম।
একাধিক Backreference
আপনি একাধিক backreferences ব্যবহার করে একাধিক গ্রুপের মান মিলিয়ে আরও জটিল প্যাটার্ন তৈরি করতে পারেন।
let regex = /(\w+)-\1-\1/;
let str = "hello-hello-hello";
console.log(regex.test(str)); // true
এখানে, (\w+) প্রথম গ্রুপটি ধরছে এবং \1-\1 দিয়ে আমরা একই মান তিনবার মেলানোর চেষ্টা করছি। স্ট্রিং hello-hello-hello সফলভাবে এই প্যাটার্নের সঙ্গে মিলে যায়।
উদাহরণ: ইমেল যাচাই (Email Validation) Backreference দিয়ে
একটি ইমেল ঠিকানা যাচাই করতে backreference ব্যবহার করা যেতে পারে যেখানে প্রথম এবং দ্বিতীয় অংশের @ চিহ্নের পরপর একই শব্দ থাকতে হবে।
let regex = /^([a-zA-Z0-9]+)@(\1)\.com$/;
let str = "test@test.com";
console.log(regex.test(str)); // true
এখানে, ([a-zA-Z0-9]+) প্যাটার্নটি প্রথম অংশ হিসেবে "test" ধরেছে এবং (\1) দিয়ে আমরা দ্বিতীয় অংশের "test" মেলাতে চাচ্ছি। স্ট্রিং test@test.com সফলভাবে মিলেছে।
Backreference এর Limitations
- গ্রুপ সীমাবদ্ধতা: RegExp-এ গ্রুপগুলি একটি নির্দিষ্ট সংখ্যা পর্যন্ত সীমাবদ্ধ থাকে, এবং আপনি গ্রুপের সংখ্যা হিসেবে সেটি নির্ধারণ করতে পারেন।
- পারফরমেন্স: Backreference ব্যবহার করা কিছু ক্ষেত্রে পারফরমেন্সে প্রভাব ফেলতে পারে, বিশেষত বড় প্যাটার্ন বা স্ট্রিংয়ের ক্ষেত্রে।
- Complexity: Backreference কিছু জটিল প্যাটার্ন তৈরি করতে সাহায্য করতে পারে, তবে খুব বেশি ব্যবহার করলে প্যাটার্নের অস্বচ্ছতা বাড়তে পারে।
সারাংশ
Backreference RegExp-এ আগের গ্রুপের মান পুনরায় ব্যবহার করার একটি কার্যকর পদ্ধতি। এটি \1, \2, \3 ইত্যাদি সিনট্যাক্সের মাধ্যমে এক বা একাধিক গ্রুপের মান স্ট্রিংয়ের মধ্যে মেলাতে সাহায্য করে। Backreference মূলত তখন ব্যবহৃত হয় যখন আপনি একই প্যাটার্ন বা অংশের পুনরাবৃত্তি চান, যেমন স্ট্রিংয়ের মধ্যে দুটি সমান অংশের মিল খুঁজে বের করা।
Named Backreferences RegExp-এ ব্যবহৃত হয়, যখন আপনি গ্রুপের নাম ব্যবহার করে পূর্ববর্তী গ্রুপের মান পুনরায় রেফারেন্স করতে চান। এটি traditional backreferences (যেমন \1, \2 ইত্যাদি) এর চেয়ে অনেক বেশি পাঠযোগ্য এবং স্পষ্ট হয়, কারণ এখানে আপনি গ্রুপের নাম ব্যবহার করতে পারেন। Named Backreferences আপনাকে কোডে আরও স্পষ্টভাবে বুঝতে সাহায্য করে যে কোন গ্রুপের মান পুনরায় ব্যবহার করা হচ্ছে।
Named Backreferences এর সিনট্যাক্স
Named Backreferences তৈরি করার জন্য, প্রথমে আপনাকে Named Capturing Groups ব্যবহার করে গ্রুপগুলো নাম দিতে হবে, তারপর সেই নাম ব্যবহার করে backreference করতে হবে। Named Backreferences এর সিনট্যাক্স এভাবে কাজ করে:
সিনট্যাক্স:
/(?<groupName>pattern)\k<groupName>/
এখানে:
(?<groupName>pattern)— এটি একটি Named Capturing Group, যেখানেgroupNameহল গ্রুপের নাম।\k<groupName>— এটি Named Backreference, যেখানেgroupNameহল গ্রুপের নাম এবং এটি প্রথম গ্রুপের সাথে পুনরাবৃত্তি খুঁজে বের করে।
Named Backreferences এর উদাহরণ
ধরা যাক, আমরা এমন একটি প্যাটার্ন তৈরি করতে চাই যেখানে দুটি শব্দ একই হবে, যেমন "hello hello":
let regex = /(?<word>hello) \k<word>/;
let str = "hello hello";
console.log(regex.test(str)); // true
এখানে:
(?<word>hello)একটি Named Capturing Group, যার নাম"word"এবং এটি"hello"মেলাবে।\k<word>একটি Named Backreference যা"word"নামক গ্রুপের মান"hello"এর পুনরাবৃত্তি খুঁজে বের করবে। ফলে, স্ট্রিং"hello hello"ম্যাচ হবে।
আরও Named Backreferences এর উদাহরণ
ধরা যাক, আমরা একটি স্ট্রিং থেকে দুটি সংখ্যার প্যাটার্ন তৈরি করতে চাই, এবং দুটি সংখ্যার পুনরাবৃত্তি খুঁজে বের করতে চাই:
let regex = /(?<first>\d{2})-(?<second>\d{2})-\k<first>-\k<second>/;
let str = "12-34-12-34";
console.log(regex.test(str)); // true
এখানে:
(?<first>\d{2})এবং(?<second>\d{2})দুটি Named Capturing Group, যার মাধ্যমে প্রথম দুটি সংখ্যা (যেমন"12"এবং"34") গ্রুপ করা হচ্ছে।\k<first>এবং\k<second>হল Named Backreferences, যা প্রথম দুটি সংখ্যার পুনরাবৃত্তি খুঁজে বের করবে এবং"12-34-12-34"স্ট্রিংটি মেলাবে।
Named Backreferences এবং সাধারণ Backreferences এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Named Backreferences | General Backreferences |
|---|---|---|
| রেফারেন্সের সিনট্যাক্স | \k<groupName> | \n (গ্রুপের ইনডেক্স নম্বর) |
| কোডের পাঠযোগ্যতা | আরও স্পষ্ট এবং পাঠযোগ্য | কম পাঠযোগ্য (গ্রুপ ইনডেক্স নম্বর ব্যবহার করতে হয়) |
| ব্যবহার | গ্রুপের নাম ব্যবহার করে | ইনডেক্স ব্যবহার করে |
| উদাহরণ | \k<word> | \1 |
সারাংশ
Named Backreferences RegExp-এ ব্যবহার করা হয় পূর্ববর্তী Named Capturing Group এর মান পুনরায় রেফারেন্স করতে। এটি সাধারণ backreferences থেকে অনেক বেশি পাঠযোগ্য এবং স্পষ্ট, কারণ আপনি গ্রুপের নাম ব্যবহার করতে পারেন। Named Backreferences ব্যবহার করে আপনি কোডে আরও পরিষ্কারভাবে বুঝতে পারেন যে কোন গ্রুপের মান পুনরায় ব্যবহার করা হচ্ছে। এটি জটিল প্যাটার্নের জন্য খুবই কার্যকর, বিশেষ করে যখন আপনার অনেক গ্রুপ থাকে এবং সেগুলোর উদ্দেশ্য বুঝতে সাহায্য করতে নাম দেওয়া হয়।
Recursion হল একটি কনসেপ্ট যেখানে একটি ফাংশন বা পদ্ধতি নিজেকে পুনরায় কল করে। সাধারণভাবে, recursion এর প্রয়োগ সাধারণ প্রোগ্রামিং ভাষায় দেখা যায়, তবে JavaScript এর RegExp (রেগুলার এক্সপ্রেশন) এর মধ্যে recursion করা কিছুটা সীমিত। তবে, RegExp তে recursion করার জন্য বিশেষ কিছু ট্রিকস এবং প্যাটার্ন ব্যবহার করা যায়, যেগুলি মূলত ফাংশনাল প্যাটার্ন রিকাশন হিসেবে কাজ করে।
RegExp তে recursion সাধারণভাবে নির্দিষ্ট প্যাটার্নের পুনরাবৃত্তি বা স্মল প্যাটার্নস খোঁজার ক্ষেত্রে ব্যবহৃত হতে পারে।
RegExp এ Recursion এবং Nested Patterns
JavaScript এর RegExp এ সরাসরি recursion সমর্থিত নয় (যেমন একটি প্যাটার্ন নিজেই তার ভিতরে নিজেকে কল করতে পারে না)। তবে, কিছু নির্দিষ্ট প্যাটার্নের মাধ্যমে recursive-like আচরণ সৃষ্টির জন্য যথাযথ grouping এবং নেস্টেড প্যাটার্ন ব্যবহার করা যেতে পারে।
RegExp এ Recursive-like behavior সাধারনত (?<name>pattern) বা Named Capture Groups এবং Backreference এর মাধ্যমে অর্জিত হতে পারে।
উদাহরণ: Balanced Parentheses Matching (Balanced Brackets)
একটি সাধারণ উদাহরণ যেখানে Recursion-like behavior ব্যবহার করা হয়, তা হল Balanced Parentheses Matching। এখানে, আমরা চেষ্টা করব একটি RegExp দিয়ে খুঁজে বের করতে, যে কোন স্ট্রিংটি সঠিকভাবে প্যারেন্টেসিস দ্বারা গঠন করা হয়েছে কিনা।
আমরা এটি একটি Recursive RegExp এর মতো তৈরি করতে পারি, যা ইনভলভ করবে গ্রুপিং এবং ব্যাকরেফারেন্স।
প্যাটার্ন:
let regex = /^(?:(\((?:[^()]*|(?R))*\))|[^()])*$/;
এখানে,
(?R)প্যাটার্নটি recursive reference এর মতো কাজ করে এবং এটি নিজেই প্যাটার্নের মধ্যে পুনরাবৃত্তি করে।\(এবং\)প্যাটার্নটি প্যারেন্টেসিস খোলার এবং বন্ধ করার জন্য ব্যবহৃত হয়।(?:[^()]*|(?R))এই অংশটি বলছে, "যেকোনো ক্যারেক্টার যা প্যারেন্টেসিস নয়, অথবা রিকার্সিভভাবে প্যাটার্নের ভিতরে থাকতে পারে।"
উদাহরণ ১: প্যারেন্টেসিসের মধ্যে সঠিকভাবে মেলানো স্ট্রিং
let regex = /^(?:(\((?:[^()]*|(?R))*\))|[^()])*$/;
let str1 = "(a(b)c)";
console.log(regex.test(str1)); // true
এখানে, প্যাটার্নটি (a(b)c) স্ট্রিংটির মধ্যে সঠিকভাবে মেলানো প্যারেন্টেসিস খুঁজে পায়, এবং true রিটার্ন করে।
উদাহরণ ২: ভুলভাবে মেলানো প্যারেন্টেসিস
let regex = /^(?:(\((?:[^()]*|(?R))*\))|[^()])*$/;
let str2 = "(a(b(c))";
console.log(regex.test(str2)); // false
এখানে, স্ট্রিংটি ভুলভাবে প্যারেন্টেসিস খোলার কারণে, প্যাটার্নটি এটি সঠিকভাবে মেলাতে পারে না এবং false রিটার্ন করবে।
RegExp এ Recursion-এর সীমাবদ্ধতা
যদিও আমরা Named Capture Groups এবং Backreferences ব্যবহার করে recursive-like behavior তৈরি করতে পারি, তবুও JavaScript এর RegExp সঠিকভাবে গণনা বা পদ্ধতিগত recursion সমর্থন করে না। এ কারণে এটি কিছু ক্ষেত্রে অত্যন্ত জটিল প্যাটার্ন তৈরি করা বা গভীর recursion প্রয়োগ করতে সীমাবদ্ধ।
- JavaScript এর RegExp-এ Direct Recursion সমর্থন নেই, যেমন একটি প্যাটার্ন নিজেই তার ভিতরে নিজেকে কল করতে পারে না।
- Backreferences শুধুমাত্র পূর্ববর্তী গ্রুপগুলোই রেফারেন্স করতে পারে, কিন্তু কোনো গ্রুপের পুনরাবৃত্তি স্বয়ংক্রিয়ভাবে ঘটানোর সুযোগ নেই।
সারাংশ
RegExp-এ Recursion সরাসরি সমর্থিত না হলেও, Named Capture Groups এবং Backreferences এর মাধ্যমে আমরা recursive-like behavior তৈরি করতে পারি। এর মাধ্যমে কিছু নির্দিষ্ট প্যাটার্নের মধ্যে পুনরাবৃত্তি করা যায়, যেমন Balanced Parentheses Matching উদাহরণের মতো। তবে JavaScript এর RegExp তে সরাসরি recursion প্রয়োগে কিছু সীমাবদ্ধতা রয়েছে।
Read more