জাভাস্ক্রিপ্ট রেগুলার এক্সপ্রেশনে replace মেথডে কলব্যাক

replace মেথডটি শুধুমাত্র একটি স্ট্রিংই নয় বরং একটি ফাংশন-কলব্যাক-ও দ্বিতীয় প্যারামিটার হিসেবে নিতে পারে, যা প্রতি পাওয়া ম্যাচের জন্য প্রয়োগ করা হবে। রেগুলার এক্সপ্রেশন দ্বারা পাওয়া প্রতিটি সাবস্ট্রিং সেই সাবস্ট্রিংয়ের জন্য এই ফাংশনটি যা রিটার্ন করবে তার দ্বারা প্রতিস্থাপিত হবে।

এই ফাংশনে প্যারামিটার পাস করা যায়: প্রথম প্যারামিটারে পাওয়া স্ট্রিংটি যাবে, দ্বিতীয় প্যারামিটারে - প্রথম ক্যাপচার গ্রুপ, তৃতীয় প্যারামিটারে - দ্বিতীয় ক্যাপচার গ্রুপ এবং এভাবে চলতে থাকবে - রেগুলার এক্সপ্রেশনে যতগুলি ক্যাপচার গ্রুপ আছে ততগুলি প্যারামিটার করা যেতে পারে।

শেষের আগের প্যারামিটারে পাওয়া ম্যাচের পজিশন যাবে, এবং শেষ প্যারামিটারে - যে স্ট্রিংতে সার্চ করা হচ্ছে তার সম্পূর্ণ স্ট্রিংটি যাবে।

এটি কিভাবে কাজ করে - তা ব্যবহারিক উদাহরণের মাধ্যমে বুঝে নেওয়া যাক।

উদাহরণ

ধরি নম্বর সহ একটি স্ট্রিং দেওয়া আছে:

javascriptlet str = '2 3 4 5';

আসুন এই নম্বরগুলি তাদের বর্গ দ্বারা প্রতিস্থাপন করি। শুরুতে আসুন শুধু আমাদের নম্বরগুলি একটি করে 콘সোলে ফাংশন-কলব্যাকে আউটপুট করি:

javascriptstr.replace(/\d+/g, function(match) {
  console.log(match);
});

আমাদের কোডটি প্রথমে '2' আউটপুট করবে, তারপর '3', '4' এবং '5'। অর্থাৎ match ভেরিয়েবলে পর্যায়ক্রমে সেই স্ট্রিংগুলি যায় যেগুলো রেগুলার এক্সপ্রেশন পেয়েছে।

আসুন সমস্যাটির সম্পূর্ণ সমাধান করি - আমরা match কে বর্গ করব এবং return ব্যবহার করে তা রিটার্ন করব। এর ফলে, পাওয়া 2 এর জন্য 4 রিটার্ন হবে এবং 2 টি 4 দ্বারা প্রতিস্থাপিত হবে, পাওয়া 3 এর জন্য 9 রিটার্ন হবে এবং 3 টি 9 দ্বারা প্রতিস্থাপিত হবে - এবং এভাবেই চলবে:

javascriptlet result = str.replace(/\d+/g, function (match) {
  return match**2; 
});

console.log(result); // আউটপুট দেবে '4 9 16 25'

উদাহরণ

ধরি এখন স্ট্রিংয়ে এইরকম কনস্ট্রাকশন দেওয়া আছে '2+3=':

javascriptlet str = '2+3= 4+5= 6+7=';

আসুন এমন করি যাতে সমান চিহ্নের পরে সংশ্লিষ্ট নম্বরগুলির যোগফল বসে। অর্থাৎ আমাদের স্ট্রিংটি নিম্নলিখিতটিতে পরিণত হওয়া উচিত:

javascript'2+3=5 4+5=9 6+7=13'

সমস্যাটির সমাধানের জন্য আসুন আবার পরীক্ষা করি - প্রথম এবং দ্বিতীয় পদের জন্য আলাদা আলাদা ক্যাপচার গ্রুপে রাখি:

javascriptstr.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) {
  console.log(match0, match1, match2);
});

এবং এখন চূড়ান্তভাবে সমস্যাটির সমাধান করি: প্রতি পাওয়া সাবস্ট্রিংয়ের জন্য প্রথম এবং দ্বিতীয় ক্যাপচার গ্রুপ যোগ করব, শূন্যতম ক্যাপচার গ্রুপ (পাওয়া স্ট্রিং, যেমন '2+3=') নেব, এর সাথে যোগফল যোগ করব এবং return এর মাধ্যমে এই সবকিছু রিটার্ন করব:

javascriptlet result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) {
  let sum = Number(match1) + Number(match2);
  return match0 + sum;
});

console.log(result);

ব্যবহারিক সমস্যা

Задание 1

একটি স্ট্রিং দেওয়া আছে:

javascriptlet str = 'aaa [2] bbb [3] ccc [12] ddd';

বন্ধনীতে থাকা নম্বরগুলি খুঁজে বের করুন এবং সেগুলি দুই গুণ বাড়িয়ে দিন। অর্থাৎ আমাদের স্ট্রিং থেকে নিম্নলিখিতটি পাওয়া উচিত:

javascript'aaa [4] bbb [6] ccc [24] ddd'
Задание 2

একটি স্ট্রিং দেওয়া আছে:

javascriptlet str = '123 456 789';

সমস্ত নম্বর খুঁজে বের করুন এবং তাদের অঙ্কগুলি উল্টো ক্রমে ঘুরিয়ে দিন। অর্থাৎ আমাদের স্ট্রিং থেকে নিম্নলিখিতটি পাওয়া উচিত:

javascript'321 654 987'
Задание 3

তারিখ সহ একটি স্ট্রিং দেওয়া আছে:

javascriptlet str = '31.12.2025 30.11.2024 29.10.2023';

সমস্ত তারিখ খুঁজে বের করুন এবং সেগুলিকে অন্য ফরম্যাটে রূপান্তর করুন, যাতে নিম্নলিখিত স্ট্রিংটি পাওয়া যায়:

javascript'2025-12-31 2024-11-30 2023-10-29'