2012-02-24 6 views
12

मुझे अपने जावास्क्रिप्ट कोड में एक बग मिला है जिसे मैंने एक स्ट्रिंग प्रतिस्थापित करने के लिए अलग किया है जिस तरह से मैं उम्मीद नहीं कर रहा था। यहाँ कोड का एक उदाहरण है:

var text = "as"; 
text = text.replace(text,"$\'"); 
console.log(text); 

इस कंसोल के लिए कोई रिक्त स्ट्रिंग प्रिंट करता है। मैं इसे कंसोल पर $ 'प्रिंट करने की उम्मीद कर रहा था। क्या कोई इसे समझा सकता है?

+2

अधिक जानकारी विनिर्देश में पाया जा सकता है: http://es5.github.com/#x15.5.4.11। जैसा कि एलेक्स ने अपने हटाए गए उत्तर में उल्लेख किया है, '$' 'एक विशेष वर्ण अनुक्रम है जिसे मैच के बाद स्ट्रिंग द्वारा प्रतिस्थापित किया जाता है। जैसे '" foobar "। जगह (" foo "," $ "") 'barbar' बन जाता है। –

उत्तर

18

आदेश स्ट्रिंग जिसके परिणामस्वरूप में $ उपयोग करने के लिए, $ रूप $$ का उपयोग में में जावास्क्रिप्ट रेगुलर एक्सप्रेशन और स्ट्रिंग विशेष अर्थ नहीं है replace विधि: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter

+0

जेएस फिडल: http://jsfiddle.net/3YTT5/ –

+0

यदि मैं $$ का उपयोग करता हूं, तो क्या अन्य ब्राउज़र समझेंगे कि मैं '$$' स्ट्रिंग के रूप में इसे स्वीकार करने के बजाय '$' चाहता हूं? संपादित करें: ऐसा लगता है कि यह मानक जावास्क्रिप्ट है। जब मैंने पहली बार अन्य ब्राउज़रों के बारे में सवाल पूछा, तो मुझे यह दिखाई दिया कि यह फ़ायरफ़ॉक्स का एक कर्कश था। –

+0

यह मानकीकृत व्यवहार है और यह आईई में भी काम करता है: http://msdn.microsoft.com/en-us/library/windows/apps/t0kbytzc(v=vs.94).aspx –

11

अगर मैं अपने प्रतिस्थापन स्ट्रिंग में क्या है पता नहीं है मैं

का उपयोग
replaceWith = "might have 2 $ signs $$ $$$ $$$$" 
"a b c".replace("b", replaceWith) // unexpected result 
"a b c".replace("b", function(){return replaceWith}) // no surprises 
+1

यह इतना आसान और बहुत उपयोगी है! धन्यवाद, मुझे कुछ परेशानी बचाई, मुझे लगता है कि regexes का उपयोग कर '' '' '' '' '' '' '' से बचने के बारे में सोचना शुरू हो गया था? जाहिर है एक अच्छा विचार नहीं है! – Kaddath

+1

इस चाल ने वास्तव में मेरे प्रोजेक्ट में से हर जगह संभावित रूप से मेरे बट को बचाया क्योंकि पूरे स्थानीय उपयोग किए जाने वाले तारों के भीतर टेम्पलेटिंग की वजह से। उपयोगकर्ता इनपुट या जो कुछ भी दिया गया है, उससे बचने के लिए '$' का अर्थ बचने के लिए यह थोड़ा बहुत परेशानी थी। स्ट्रिंग से पहले '() =>' फेंकने और इसके साथ किया जाने के लिए बस इतना आसान है। –

+0

सर्वश्रेष्ठ उत्तर, भागने के साथ चारों ओर गड़बड़ करने की कोई ज़रूरत नहीं है। सटीक स्ट्रिंग जिसे आप प्रतिस्थापन के रूप में डालना चाहते हैं वह यह है कि यह क्या होता है – Omer

संबंधित मुद्दे