जावास्क्रिप्ट रेगुलर एक्सप्रेशन में रिप्लेस मेथड में कॉलबैक
रिप्लेस मेथड दूसरे पैरामीटर के रूप में न केवल एक स्ट्रिंग, बल्कि एक कॉलबैक फंक्शन भी ले सकता है, जो प्रत्येक पाए गए मैच के लिए लागू होगा। प्रत्येक सबस्ट्रिंग, जिसे रेगुलर एक्सप्रेशन ने पाया है, उसे उस चीज़ से बदल दिया जाएगा जो यह फंक्शन उस विशेष सबस्ट्रिंग के लिए लौटाता है।
इस फंक्शन में पैरामीटर पास किए जा सकते हैं: पहले पैरामीटर में पाई गई स्ट्रिंग रखी जाएगी, दूसरे पैरामीटर में - पहला कैप्चर ग्रुप, तीसरे पैरामीटर में - दूसरा कैप्चर ग्रुप और इसी तरह - आप उतने ही पैरामीटर बना सकते हैं, जितने कैप्चर ग्रुप रेगुलर एक्सप्रेशन में हैं।
अंत से दूसरे पैरामीटर में पाए गए मैच की पोजीशन रखी जाएगी, और अंतिम में - वह पूरी स्ट्रिंग जिसमें खोज की जा रही है।
यह सब कैसे काम करता है - हम व्यावहारिक उदाहरणों से समझेंगे।
उदाहरण
मान लीजिए नंबरों वाली एक स्ट्रिंग दी गई है:
let str = '2 3 4 5';
आइए हम इन नंबरों को उनके वर्गों से बदल दें। शुरुआत के लिए आइए हम अपने नंबरों को कॉलबैक फंक्शन में एक-एक करके कंसोल में प्रिंट करें:
str.replace(/\d+/g, function(match) {
console.log(match);
});
हमारा कोड पहले '2' प्रिंट करेगा, फिर
'3', '4' और '5'। यानी
वेरिएबल match में क्रमिक रूप से वे स्ट्रिंग आती हैं
जिन्हें रेगुलर एक्सप्रेशन ने पाया है।
आइए हम समस्या को पूरी तरह से हल करें - match का वर्ग करें
और return का उपयोग करके इसे वापस लौटाएं।
ऐसा होगा कि पाई गई दो के लिए 4 वापस आएगा
और दो को इस चार से बदल दिया जाएगा, पाई गई तीन के लिए 9 वापस आएगा
और तीन को इस नौ से बदल दिया जाएगा
- और इसी तरह आगे:
let result = str.replace(/\d+/g, function (match) {
return match**2;
});
console.log(result); // प्रिंट करेगा '4 9 16 25'
उदाहरण
मान लीजिए अब स्ट्रिंग में इस प्रकार के कंस्ट्रक्शन दिए गए हैं
'2+3=':
let str = '2+3= 4+5= 6+7=';
आइए हम ऐसा करें कि बराबर के बाद संबंधित नंबरों का योग डाला जाए। यानी हमारी स्ट्रिंग को निम्नलिखित में बदलना चाहिए:
'2+3=5 4+5=9 6+7=13'
समस्या के समाधान के लिए आइए हम फिर से प्रयोग करें - पहले और दूसरे ऐडेंड को अलग-अलग कैप्चर ग्रुप में रखें:
str.replace(/(\d+)\+(\d+)=/g, function (match0, match1, match2) {
console.log(match0, match1, match2);
});
और अब समस्या को अंतिम रूप से हल करते हैं: प्रत्येक
पाई गई सबस्ट्रिंग के लिए पहले और दूसरे कैप्चर ग्रुप को जोड़ दें, शून्यवें कैप्चर ग्रुप (पाई गई स्ट्रिंग, उदाहरण के लिए '2+3=') को लें, उसमें
परिणाम जोड़ दें और return के माध्यम से यह सब वापस लौटा दें:
let result = str.replace(/(\d+)\+(\d+)=/g, function(match0, match1, match2) {
let sum = Number(match1) + Number(match2);
return match0 + sum;
});
console.log(result);
व्यावहारिक समस्याएं
एक स्ट्रिंग दी गई है:
let str = 'aaa [2] bbb [3] ccc [12] ddd';
कोष्ठक में खड़ी संख्याएं खोजें और उन्हें दोगुना बढ़ा दें। यानी हमारी स्ट्रिंग से निम्नलिखित प्राप्त होनी चाहिए:
'aaa [4] bbb [6] ccc [24] ddd'
एक स्ट्रिंग दी गई है:
let str = '123 456 789';
सभी संख्याएं खोजें और उनके अंकों को उल्टे क्रम में पलट दें। यानी हमारी स्ट्रिंग से निम्नलिखित प्राप्त होनी चाहिए:
'321 654 987'
तारीखों वाली एक स्ट्रिंग दी गई है:
let str = '31.12.2025 30.11.2024 29.10.2023';
सभी तारीखें खोजें और उन्हें दूसरे फॉर्मेट में बदलें ताकि निम्नलिखित स्ट्रिंग प्राप्त हो:
'2025-12-31 2024-11-30 2023-10-29'