स्ट्रिंग शाब्दिक के साथ यह काफी आसान है।
ज़रुरी नहीं! उदाहरण केवल की पहली घटना को प्रतिस्थापित करता है string_to_replace। अधिक सामान्यतः आप सभी घटनाओं को बदलना चाहते हैं, इस स्थिति में, आपको स्ट्रिंग को एक वैश्विक ( /.../g) RegExp में बदलना होगा । new RegExpकंस्ट्रक्टर का उपयोग करके आप इसे स्ट्रिंग से कर सकते हैं :
new RegExp(string_to_replace, 'g')
इसके साथ समस्या यह है कि स्ट्रिंग शाब्दिक में कोई भी रेगेक्स-विशेष वर्ण सामान्य वर्ण होने के बजाय अपने विशेष तरीकों से व्यवहार करेंगे। आपको उसे ठीक करने के लिए बैकस्लैश-बचना होगा। दुर्भाग्य से, आपके लिए ऐसा करने के लिए कोई अंतर्निहित फ़ंक्शन नहीं है, इसलिए यहां एक का उपयोग कर सकते हैं:
function escapeRegExp(s) {
return s.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')
}
यह भी ध्यान रखें कि जब आप में एक रेगुलर एक्सप्रेशन का उपयोग करें कि replace(),, प्रतिस्थापन स्ट्रिंग अब भी विशेष वर्ण है $। यह भी बचना चाहिए अगर आप $अपने प्रतिस्थापन पाठ में शाब्दिक होना चाहते हैं !
function escapeSubstitute(s) {
return s.replace(/\$/g, '$$$$');
}
(चार $एस क्योंकि वह खुद एक प्रतिस्थापन स्ट्रिंग है - अर्ग!)
अब आप RegExp के साथ वैश्विक स्ट्रिंग प्रतिस्थापन को लागू कर सकते हैं:
function replace_foo(target, string_to_replace, replacement) {
var relit= escapeRegExp(string_to_replace);
var sub= escapeSubstitute(replacement);
var re= new RegExp(relit, 'g');
return target.replace(re, sub);
}
क्या मुसीबत है। सौभाग्य से अगर आप सब करना चाहते हैं, तो स्ट्रेट स्ट्रिंग को रीगेक्स के अतिरिक्त भागों के साथ बदल दिया जाता है, एक तेज़ तरीका है:
s.split(string_to_replace).join(replacement)
...और बस यही। यह आमतौर पर समझा जाने वाला मुहावरा है।
मैं सब कुछ प्रतिस्थापित करना चाहता हूं, लेकिन string_to_replace
इसका क्या मतलब है, आप स्ट्रिंग के खिलाफ एक मैच में भाग नहीं लेने वाले पाठ के सभी हिस्सों को बदलना चाहते हैं? ^निश्चित रूप से एक प्रतिस्थापन यह नहीं करता है, क्योंकि ^इसका मतलब है एक स्टार्ट-ऑफ-स्ट्रिंग टोकन, एक नकार नहीं। ^केवल []चरित्र समूहों में एक नकार है । नकारात्मक लुकहैड्स भी हैं (?!...), लेकिन जेस्क्रिप्ट में इसके साथ समस्याएं हैं इसलिए आपको आमतौर पर इससे बचना चाहिए।
आप स्ट्रिंग के बीच 'सब कुछ' का मिलान करने का प्रयास कर सकते हैं, और मिलान स्ट्रिंग के बीच किसी भी खाली खिंचाव को छोड़ने के लिए फ़ंक्शन का उपयोग कर सकते हैं:
var re= new RegExp('(.*)($|'+escapeRegExp(string_to_find)+')')
return target.replace(re, function(match) {
return match[1]===''? match[2] : replacement+match[2];
});
यहाँ, फिर से, एक विभाजन सरल हो सकता है:
var parts= target.split(string_to_match);
for (var i= parts.length; i-->0;)
if (parts[i]!=='')
parts[i]= replacement;
return parts.join(string_to_match);
/इस फॉर्म का उपयोग करते समय रेगेक्स सीमांकक को भी छोड़ दें।