2008-11-13 15 views
6

क्या मौजूदा जावास्क्रिप्ट ढांचे में से कोई भी गैर-रेगेक्स replace() फ़ंक्शन, है या इसे पहले से ही एक-ऑफ फ़ंक्शन के रूप में वेब पर पोस्ट किया गया है?जावास्क्रिप्ट गैर-रेगेक्स

उदाहरण के लिए मैं "@!#$123=%" को प्रतिस्थापित करना चाहता हूं और मैं इस बारे में चिंता नहीं करना चाहता कि कौन से पात्र भागने के लिए हैं। प्रतीत होता है कि अधिकांश भाषाओं में प्रतिस्थापन करने के दोनों तरीके होते हैं। मैं यह सरल चीज़ जोड़ना चाहूंगा।

उत्तर

18

मैं अपने प्रश्न गलतफहमी हो सकता है लेकिन जावास्क्रिप्ट है एक replace()

var string = '@!#$123=%'; 
var newstring = string.replace('@!#$123=%', 'hi'); 

संपादित: (टिप्पणी देखें) हालांकि यह प्रदर्शित नहीं करता है 5 वीं संस्करण, उस में यह जानकारी है लगता है जब मैं link directly इसे ऊपर। यहां प्रासंगिक भाग है:

प्रतिस्थापन() विधि एक खोज-और-प्रतिस्थापन ऑपरेशन करती है। यह अपने पहले तर्क के रूप में एक नियमित अभिव्यक्ति और एक प्रतिस्थापन स्ट्रिंग के रूप में एक नियमित अभिव्यक्ति लेता है। यह उस स्ट्रिंग को खोजता है जिस पर इसे निर्दिष्ट पैटर्न वाले मैचों के लिए बुलाया जाता है। यदि नियमित अभिव्यक्ति में जी ध्वज सेट होता है, तो प्रतिस्थापन() विधि प्रतिस्थापन स्ट्रिंग के साथ स्ट्रिंग में सभी मैचों को प्रतिस्थापित करती है; अन्यथा, यह केवल पहले मैच को प्रतिस्थापित करता है। यदि प्रतिस्थापन() को बदलने के लिए पहला तर्क नियमित अभिव्यक्ति की बजाय एक स्ट्रिंग है, तो विधि उस स्ट्रिंग के लिए सचमुच regExp() कन्स्ट्रक्टर के साथ नियमित अभिव्यक्ति में परिवर्तित करने की बजाय खोज() करता है।

+0

हुह। हो सकता है कि मैं "जावास्क्रिप्ट: द डिफिनिटिव गाइड" का पुराना संस्करण देख रहा था जो केवल रेगेक्स उदाहरण दिखाता है। इसलिए मैंने उपर्युक्त कोड की कोशिश नहीं की। अब मैं वास्तव में गूंगा महसूस करता हूँ। -10 मेरे लिए ठंडा अंक। – BuddyJoe

+0

ऐसा होता है, मुझे अभी एक अंतिम इंडेक्सऑफ() विधि मिली है ... * sigh * ... – Owen

+0

क्या कोई "जावास्क्रिप्ट: द डिफिनिटिव गाइड" का नवीनतम संस्करण देख सकता है? क्या इस तरह का उदाहरण अब शामिल है? – BuddyJoe

13

मुझे एक गैर-रेगेक्स जावास्क्रिप्ट स्ट्रिंग प्रतिस्थापन() विधि के लिए खोज में बिल्कुल वही समस्या थी।

"some text containing regex interpreted characters: $1.00".split("$").join("£"); 

जो देता है::

"कुछ पाठ वाले रेगुलर एक्सप्रेशन से व्याख्या की वर्ण: £ 1.00"

तुलना मेरे समाधान) विभाजन (के संयोजन का उपयोग और शामिल होने के() के लिए किया गया की जगह के साथ():

"some text containing regex interpreted characters: $1.00".replace(new RegExp("$"),"£") 

बिज़ारेलि देता है:

"कुछ पाठ वाले रेगुलर एक्सप्रेशन से पात्रों में व्याख्या: $ 1.00 £"

+0

पर्याप्त उदाहरण ऑनलाइन आपको सरल प्रतिस्थापन विधि नहीं दिखाएंगे - "रेगेक्स समझाया गया कुछ वर्ण: $ 1.00"। की जगह ("$", "£"); – BuddyJoe

+0

यह वेब प्रोग्रामिंग है: पहिया को पुनर्निर्मित करना। जावास्क्रिप्ट का 'प्रतिस्थापन() 'एक बुरा मजाक है। इस हैक के लिए धन्यवाद। मुझे लगता है कि यह सबसे अच्छा समाधान है। +1 – user2173353

+6

«$» का मतलब नियमित अभिव्यक्ति में रेखा का अंत है! तो 'RegExp ("$")' के साथ कुछ भी अजीब बात नहीं है जो आपकी लाइन के अंत से अपेक्षित है। RegExp को भेजने से पहले आपको अपने डॉलर से बच जाना चाहिए था: 'RegExp ("\ $") ' – Yvan

1

इस प्रयास करें:

function replaceAllTemp(str,find, replace) { 
var ignoreCase=true; 
var _token; 
var token=find; 
var newToken=replace; 
var i = -1; 

if (typeof token === "string") { 

    if (ignoreCase) { 

     _token = token.toLowerCase(); 

     while((
      i = str.toLowerCase().indexOf(
       token, i >= 0 ? i + newToken.length : 0 
      )) !== -1 
     ) { 
      str = str.substring(0, i) + 
       newToken + 
       str.substring(i + token.length); 
     } 

    } else { 
     return this.split(token).join(newToken); 
    } 

} 
return str; 
}; 
संबंधित मुद्दे