स्ट्रिंग अक्षर के साथ यह काफी आसान है।
वास्तव में नहीं! उदाहरण केवल string_to_replace
की घटना को प्रतिस्थापित करता है। आमतौर पर आप सभी घटनाओं को प्रतिस्थापित करना चाहते हैं, इस मामले में, आपको स्ट्रिंग को वैश्विक (/.../g
) RegExp में परिवर्तित करना होगा। आप new RegExp
निर्माता का उपयोग कर एक स्ट्रिंग से ऐसा कर सकते हैं:
new RegExp(string_to_replace, 'g')
इस के साथ समस्या यह है कि शाब्दिक स्ट्रिंग में किसी भी regex-विशेष वर्ण बजाय सामान्य वर्णों होने का उनके विशेष तरीके से व्यवहार करेंगे। आपको इसे ठीक करने के लिए बैकस्लैश-बचाना होगा। दुर्भाग्य से, वहाँ आप के लिए यह करने के लिए निर्मित एक समारोह नहीं है, तो यहाँ है आप उपयोग कर सकते हैं:
function escapeRegExp(s) {
return s.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')
}
यह भी ध्यान रखें कि जब आप replace()
में एक रेगुलर एक्सप्रेशन का उपयोग करें, प्रतिस्थापन स्ट्रिंग अब भी विशेष वर्ण है, $
।यदि आप अपने प्रतिस्थापन टेक्स्ट में एक शाब्दिक $
रखना चाहते हैं तो यह भी बच निकला होगा!
function escapeSubstitute(s) {
return s.replace(/\$/g, '$$$$');
}
(चार $
रों क्योंकि अपने आप में एक प्रतिस्थापन स्ट्रिंग-अरे यह है कि!)
अब आप रेगुलर एक्सप्रेशन के साथ वैश्विक स्ट्रिंग प्रतिस्थापन लागू कर सकते हैं:
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);
}
क्या एक दर्द। सौभाग्य से यदि एक सीधे स्ट्रिंग regex का कोई अतिरिक्त भागों के साथ की जगह है सब आप क्या करना चाहते, वहाँ एक तेज तरीका है:
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);
और छोड़ देते हैं पर सबसे तेजी से हो रहा है पर regexes के लिए कोई ज़रूरत नहीं इस फॉर्म का उपयोग करते समय '/' regex delimiters भी। – cdhowie
धन्यवाद मध्यस्थ। और cdhowie: महान टिप्पणी। मैंने पहले दूसरी तरफ कोशिश की होगी। बचने के किसी विशेष दृश्यों: – buley