जावास्क्रिप्ट में "सब कुछ बदलें": पुराने तरीकों से लेकर आधुनिक मानक तक
\n\nएक स्थिति की कल्पना करें: आप एक चैट-बॉट लिख रहे हैं, और उपयोगकर्ता ने "привеТТ" टाइपो के साथ एक संदेश भेजा है। सभी "Т" को "т" से बदलने की आवश्यकता है। या आप एक CSV फ़ाइल पार्स कर रहे हैं और सभी अतिरिक्त स्पेस हटाना चाहते हैं। सरल लगता है? हाल तक जावास्क्रिप्ट में यह एक वास्तविक सिरदर्द था।
\n\nप्रश्न "How do I replace all occurrences of a string?" Stack Overflow पर सबसे लोकप्रिय प्रश्नों में से एक है। हजारों डेवलपर्स इस प्रतीत होने वाले सरल कार्य पर अटक गए। क्यों? क्योंकि पुराना अच्छा replace() डिफ़ॉल्ट रूप से केवल पहले मिलान को बदलता है। चाल? g फ्लैग के साथ रेगुलर एक्सप्रेशन का उपयोग करना होगा। लेकिन 2025 में हमारे पास इससे कहीं अधिक सुंदर समाधान है।
इस लेख में, हम जावास्क्रिप्ट में सबस्ट्रिंग के सभी उदाहरणों को बदलने के सभी मौजूदा तरीकों का विश्लेषण करेंगे: क्लासिक से लेकर आधुनिक मानकों तक। आप जानेंगे कि विभिन्न कार्यों के लिए कौन सा तरीका चुनना है और क्यों replaceAll आपका नया सबसे अच्छा दोस्त है।
पुराना replace() "बॉक्स से बाहर" काम क्यों नहीं करता?
\n\nआइए उस निराशा से शुरू करें जो हर शुरुआती को होती थी:
\n\nlet text = "Я люблю JavaScript, JavaScript — это круто!";\nlet newText = text.replace("JavaScript", "Python");\nconsole.log(newText); \n// आउटपुट: "Я люблю Python, JavaScript — это круто!"\n\n\nदेखा? केवल पहला उदाहरण बदला गया। String.prototype.replace() मेथड ऐतिहासिक रूप से इस तरह डिज़ाइन किया गया है। यदि आप इसे एक स्ट्रिंग (रेगुलर एक्सप्रेशन नहीं) देते हैं, तो यह पहले मिलान को खोजता और बदलता है। कई भाषाओं (Python, Java) के लिए यह एक झटका था। लेकिन जावास्क्रिप्ट लंबे समय तक इस सीमा के साथ रहा।
वैसे, यदि आप रूसी में प्रश्न "how do I replace all occurrences of a string in JavaScript" का उत्तर ढूंढ रहे हैं, तो जान लें कि 2021 तक एकमात्र विश्वसनीय तरीका RegExp का उपयोग करना था।
\n\nतरीका #1: क्लासिक — replace() + RegExp (अभी भी प्रासंगिक)
\n\nयह "दादाजी" तरीका है, जो सभी ब्राउज़रों में काम करता है, जिसमें Internet Explorer भी शामिल है (हाँ, यह अभी भी कहीं जीवित है)। रहस्य — g (global) फ्लैग।
let text = "Кошка съела мышку. Кошка довольна.";\nlet newText = text.replace(/Кошка/g, "Собака");\nconsole.log(newText); \n// "Собака съела мышку. Собака довольна."\n\n\nलाभ:
\n- \n
- हर जगह काम करता है (IE11, Node.js के पुराने संस्करण) \n
- शक्तिशाली: कैप्चर ग्रुप,
iफ्लैग (केस-इनसेंसिटिव) का उपयोग कर सकते हैं \n - बहुत तेज़ \n
नुकसान:
\n- \n
- विशेष वर्णों (डॉट, स्टार आदि) को एस्केप करने की आवश्यकता है \n
- शुरुआती लोगों के लिए कोड कम पढ़ने योग्य \n
- यदि बदलने के लिए स्ट्रिंग डायनामिक है (उपयोगकर्ता से आती है) तो उपयुक्त नहीं \n
यदि आपको डायनामिक स्ट्रिंग बदलने की आवश्यकता है, तो RegExp कंस्ट्रक्टर का उपयोग करें:
function escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nlet userInput = "привет.мир";\nlet text = "привет.мир, как дела? привет.мир!";\nlet safePattern = escapeRegExp(userInput);\nlet result = text.replace(new RegExp(safePattern, 'g'), 'пока.все');\nconsole.log(result);\n// "пока.все, как дела? пока.все!"\n\n\nescapeRegExp फ़ंक्शन — एक अनिवार्य अनुष्ठान है यदि आप उपयोगकर्ता इनपुट के साथ काम कर रहे हैं। अन्यथा स्ट्रिंग में डॉट को "कोई भी वर्ण" के रूप में व्याख्यायित किया जाएगा।
तरीका #2: आधुनिक मानक — replaceAll() (ES2021+)
\n\nES2021 (ECMAScript 2021) से शुरू करके, हमारे पास String.prototype.replaceAll() है। यह प्रश्न "how do I replace all occurrences of a string in JavaScript" का उत्तर है, जिसका वर्षों से इंतजार था।
let text = "Я люблю JavaScript, JavaScript — это круто!";\nlet newText = text.replaceAll("JavaScript", "Python");\nconsole.log(newText); \n