2009-01-28 13 views
42

संभव डुप्लिकेट:
Escape string for use in Javascript regexजावास्क्रिप्ट में एक regexp चर गुजर

मैं इस तरह एक संदेश है:

अधिकतम {0} में अनुमति दी वर्ण { 1}

और मैं एक समारोह समस्या के रूप में

for(var i = 0; i < agrs.length; i++){ 
    reg = new RegExp('\{'+i+'\}', 'gi'); 
    key = key.replace(reg,agrs[i]) 
} 

संदेश तर्क पारित कर का उपयोग कर बनाने के लिए है कि यह परम i लेने के लिए reg exp बनाने में सक्षम नहीं है है।

इसे प्राप्त करने का तरीका क्या है?

+2

@casperOne, डुप्लिकेट क्या है? न तो [यह सवाल] (http://stackoverflow.com/questions/4029109/javascript-regex-how-to-put-a-variable-inside-a-regular-expression) न ही [यह प्रश्न] (http: // stackoverflow.com/questions/494035/how-do-you-pass-a-variable-to-a-regular-expression-javascript) इस प्रश्न के समान थे। यह सवाल महत्वपूर्ण है क्योंकि यह वास्तव में एक स्ट्रिंग वैरिएबल को रेगेक्स पैटर्न में मिलाता है, जबकि अन्य प्रश्नों के उत्तर केवल उदाहरण प्रदान करते हैं जहां पात्रों से बचने का कोई मुद्दा नहीं था। – MandM

उत्तर

52

आपका regexp /{0}/gi है क्योंकि आप इसे स्ट्रिंग से बनाते हैं। और यह एक मान्य अभिव्यक्ति नहीं है। आप क्योंकि यह regexp वाक्य रचना में एक विशेष अर्थ नहीं है {regexp में से बचने के लिए की जरूरत है, तो यह होना चाहिए:

new RegExp('\\{'+i+'\\}', 'gi'); 

जो /\\{0\\}/gi है। आपको स्ट्रिंग में \\ से बचने के लिए से बचने की आवश्यकता है।

+0

ठंडी हवा की तरह काम किया। धन्यवाद। – Nrj

3

मैं अपनी दूसरी पंक्ति

reg = new RegExp('\{'+i+'\}', 'gi'); 

माना जाता है लेकिन यह है कि यदि आपके केवल समस्या है या नहीं मैं नहीं जानता कि लगता है।

+0

हाँ यह ऐसा ही है, लेकिन यह एक बनाने की अनुमति नहीं देता है। "अमान्य क्वांटिफायर" कहते हैं। – Nrj

6

मैं आपकी समस्या को हल करने के लिए String.replace() के कार्यात्मक रूप का उपयोग करने के लिए दृढ़ता से प्रोत्साहित करता हूं, बजाय {0}, {1}, इत्यादि के लिए एक लूप में regexp को parametrize करने की कोशिश करने के बजाय।

दूसरे शब्दों में, '{0}' या '{1}' की तलाश करने के बजाय, बस '{([0-9] +)}' (यानी {} के मनमाना संख्या के आसपास 'देखें, और {) के बीच की संख्या के आधार पर इन अभिव्यक्तियों को समझदारी से बदलने के लिए प्रतिस्थापन() फ़ंक्शन को फ़ंक्शन पास करें। इससे आपको RegExp अक्षर का उपयोग करने की सुविधा मिलती है जिसे आप/{([0-9] +)}/। बल्कि तार में भागने पात्रों के साथ चारों ओर गंदगी से

कुछ इस तरह:

s='the song says {0} little {1} little {2} little-endians'; 
args=['zero','one','two']; 
new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch) 
    {return args[(+firstmatch)]; } 
); 

जो पैदावार

the song says zero little one little two little-endians 

यह similar question देखें।

संपादित करें:

s='the song says {0} little {1} little {2} little-endians,\n'+ 
    ' {3} little {4} little {5} little-endians'; 
args=['zero','one','two']; 
new_string = s.replace(/{([0-9]+)}/g, function(wholematch,firstmatch) 
    {var i = +firstmatch; return i < args.length ? args[i] : wholematch;} 
); 

जो पैदावार

the song says zero little one little two little-endians, 
{3} little {4} little {5} little-endians 
1
function escapeRegExp(str) { 
    return str.replace(/[-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); 
} 

var re = new RegExp(escapeRegExp(str)); 
: यदि आप अकेले आइटम है कि अपने args सूची की लंबाई से अधिक कर रहे हैं छोड़ना चाहते हैं, करने के लिए विवेक की अच्छी तरह जांच पैरामीटर संख्या सुनिश्चित करें

देखें: Escape string for use in Javascript regex

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