জাভাস্ক্রিপ্ট রেগুলার এক্সপ্রেশনে পজিটিভ এবং নেগেটিভ লুকএরাউন্ড
কখনও কখনও এই ধরনের সমস্যার সমাধান করা প্রয়োজন: স্ট্রিং
'aaa' খুঁজে বের করে এটিকে '!' দিয়ে প্রতিস্থাপন করুন,
কিন্তু শুধুমাত্র যদি 'aaa' এর পরে
'x' থাকে, এবং 'x' কে নিজেই
প্রতিস্থাপন করবেন না। আমরা যদি সমস্যাটি সমাধান করার চেষ্টা করি
'সরাসরি', তাহলে আমাদের কিছুই কাজ করবে না:
'aaax baaa'.replace(/aaax/g, '!'); // ফেরত দেবে '! baaa', কিন্তু আমরা চেয়েছিলাম '!x baaa'
লুকএহেড
সমস্যা সমাধানের জন্য একটি উপায় প্রয়োজন যা বলে,
যে 'x' কে প্রতিস্থাপন করা উচিত নয়। এটি করা হয়
বিশেষ বন্ধনী (?= ) ব্যবহার করে,
যা শুধু দেখে কিন্তু নিজের সাথে নেয় না।
এই বন্ধনীগুলিকে বলা হয় পজিটিভ লুকএহেড। পজিটিভ - কারণ 'x'
(আমাদের ক্ষেত্রে) অবশ্যই থাকতে হবে - শুধুমাত্র তখনই
প্রতিস্থাপন ঘটবে।
আসুন আমাদের সমস্যা সমাধানের জন্য এই বন্ধনীগুলি প্রয়োগ করি:
'aaax aaab'.replace(/aaa(?=x)/g, '!'); // ফেরত দেবে '!x aaab'
এছাড়াও আছে নেগেটিভ লুকএহেড
- (?! ) - এটি, বিপরীতভাবে, বলে যে
কিছু থাকা উচিত নয়। নিম্নলিখিত উদাহরণে,
প্রতিস্থাপন ঘটবে, শুধুমাত্র যদি 'aaa' এর পরে
'x' না থাকে:
'aaax aaab'.replace(/aaa(?!x)/g, '!'); // ফেরত দেবে 'aaax !b'
লুকবিহাইন্ড
একইভাবে আছে পজিটিভ লুকবিহাইন্ড
- (?<= )। নিম্নলিখিত
উদাহরণে প্রতিস্থাপন ঘটবে, শুধুমাত্র যদি
'aaa' এর আগে 'x' থাকে:
'xaaa'.replace(/(?<=x)aaa/g, '!'); // ফেরত দেবে 'x!'
এবং আরও আছে নেগেটিভ লুকবিহাইন্ড
- (?<! )। নিম্নলিখিত উদাহরণে প্রতিস্থাপন
ঘটবে, শুধুমাত্র যদি 'aaa' এর আগে
'x' না থাকে:
'baaa'.replace(/(?<!x)aaa/g, '!'); // ফেরত দেবে 'b!'
ব্যবহারিক সমস্যা
একটি স্ট্রিং দেওয়া হয়েছে, যাতে ফাংশনের নাম রয়েছে:
let str = 'func1() func2() func3()';
স্ট্রিং থেকে ফাংশনের নামগুলির একটি অ্যারে পান।
একটি ট্যাগ সহ একটি স্ট্রিং দেওয়া হয়েছে:
let str = '<a href="" class="eee" id="zzz">';
এই ট্যাগের অ্যাট্রিবিউটের নামগুলির একটি অ্যারে পান।
ভেরিয়েবল সহ একটি স্ট্রিং দেওয়া হয়েছে:
let str = '$aaa $bbb $ccc xxxx';
সাবস্ট্রিংগুলি পান, যার আগে ডলার চিহ্ন রয়েছে।