2009-12-27 9 views
106

मैं इसप्रतिस्थापित करने के दौरान जावास्क्रिप्ट केवल पहले उदाहरण को क्यों प्रतिस्थापित करता है?

var date = $('#Date').val(); 

यह है कि क्या इस

12/31/2009

कैसा दिखेगा पाठ बॉक्स में मान प्राप्त अब मैं इसे पर ऐसा

var id = 'c_' + date.replace("/", ''); 

और परिणाम

c_1231/200

यह आखिरी '/' याद करता है, हालांकि मुझे समझ में नहीं आता कि क्यों।

date.replace(new RegExp("/", "g"), '') 
// or 
date.replace(/\//g, '') 

अन्यथा केवल पहली घटना बदल दिया जाएगा:

+0

संपादित शीर्षक थोड़ा और वर्णनात्मक है, लेकिन यह आप सवाल कर रहे हैं, तो आप मालिक हैं। : डी –

+1

संभावित डुप्लिकेट [जावास्क्रिप्ट में एक स्ट्रिंग की सभी घटनाओं को प्रतिस्थापित करना] (http://stackoverflow.com/questions/1144783/replacing-all-occurrences-of-a-string-in-javascript) – chharvey

+0

यह बहुत दर्दनाक है और अनावश्यक। मुझे आश्चर्य है कि इस तरह 'प्रतिस्थापन' को लागू करने का क्या कारण था। मैं regexp पर 'str.split (खोज)। जॉइन (प्रतिस्थापन)' भी चुनता हूं। –

उत्तर

193

आप विश्व स्तर पर बदलने के लिए g flag सेट करना होगा।

+0

सी # प्रतिस्थापन क्यों अंतर। सोचा कि यह डिफ़ॉल्ट रूप से सभी घटनाओं को प्रतिस्थापित करेगा। लेकिन अगर यह केवल पहली घटना है तो 2 स्लेश दूर क्यों ले गए? – chobo2

+2

@ chobo2 यह दो स्लेश नहीं ले गया। शुरुआत करने के लिए केवल दो थे, और यह पहले को हटा दिया। –

+4

@ chobo2: ठीक है, जावास्क्रिप्ट सी # नहीं है। और '12/31/200 9 में केवल दो स्लेश होते हैं। – Gumbo

65

सी #/एनईटी कक्षा पुस्तकालय (और अधिकतर समझदार भाषाओं) के विपरीत, जब आप String कोविधि पर स्ट्रिंग-टू-मैच तर्क के रूप में पास करते हैं, तो यह स्ट्रिंग को प्रतिस्थापित नहीं करता है। यह स्ट्रिंग को RegExp में परिवर्तित करता है और एक रेगेक्स प्रतिस्थापन करता है। चूंकि गम्बो बताते हैं, एक रेगेक्स प्रतिस्थापन के लिए g लोबल फ्लैग की आवश्यकता होती है, जो डिफ़ॉल्ट रूप से नहीं है, सभी मैचों को एक ही बार में बदलने के लिए।

आप एक असली स्ट्रिंग आधारित की जगह चाहते हैं - उदाहरण के लिए, क्योंकि मैच स्ट्रिंग गतिशील है और अक्षर हैं जो regexen में एक विशेष अर्थ नहीं होता शामिल हो सकता है - उस के लिए जावास्क्रिप्ट मुहावरा है:

var id= 'c_'+date.split('/').join(''); 
+2

यदि आप वास्तव में इस प्रकार की कार्यक्षमता को धक्का देना चाहते हैं, तो आप 'String.prototype.strReplace = function (सुई, प्रतिस्थापन) जैसे कुछ कोशिश कर सकते हैं {this.split (सुई)। जॉइन (प्रतिस्थापन || "");}; 'फिर आप 'var id =" c_ "+ date.strReplace ("/")' – Patrick

+0

मुझे इसी तरह के प्रश्नों के किसी भी अन्य उत्तर की तुलना में बेहतर स्पष्टीकरण पसंद है। स्वीकार्य उत्तर केवल एक वर्कअराउंड प्रदान करता है, शीर्षक में 'क्यों' का उत्तर नहीं। – JakeJ

+0

यह केवल मेरी खोज स्ट्रिंग के पहले दो उदाहरणों पर काम करता प्रतीत होता है ... अन्य सभी को अनदेखा किया जाता है ... ?? (क्या यह पता चलता है कि मेरे खोज उदाहरण में कई वर्ण हैं? –

5

आप उपयोग कर सकते हैं:

String.prototype.replaceAll = function(search, replace) { 
if (replace === undefined) { 
    return this.toString(); 
} 
return this.split(search).join(replace); 
} 
संबंधित मुद्दे

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