2011-02-23 7 views
72

एक में दो regex पैटर्न कैसे बनाएँ?वैरिएबल से जावास्क्रिप्ट Regexp गतिशील पीढ़ी?

उदाहरण के लिए मेरे पास एक लंबा पैटर्न और एक छोटा है, मुझे लंबे समय के सामने छोटे को रखना होगा।

var pattern1 = ':\(|:=\(|:-\('; 
var pattern2 = ':\(|:=\(|:-\(|:\(|:=\(|:-\(' 
str.match('/'+pattern1+'|'+pattern2+'/gi'); 

यह काम नहीं करता है। जब मैं तारों को जोड़ रहा हूं, तो सभी स्लेश चले गए हैं।

उत्तर

130

आप RegExp उपयोग करने के लिए:

str.match(new RegExp(pattern1+'|'+pattern2, 'gi')); 

जब मैं तार श्रृंखलाबद्ध रहा हूँ, सब स्लैश चले गए हैं।

आप अपने पैटर्न में एक बैकस्लैश एक विशेष regex चरित्र से बचने के लिए है, तो (जैसे \(), तो आपको स्ट्रिंग में दो बैकस्लैश उपयोग करने के लिए (क्योंकि \ एक स्ट्रिंग में एस्केप वर्ण है): new RegExp('\\(')/\(/ जैसा ही होगा। शाब्दिक regex छोड़ और वस्तु निर्माता, जहां आप एक के रूप में रेगुलर एक्सप्रेशन से पारित कर सकते हैं का उपयोग करने के

var regEx = new RegExp(pattern1+'|'+pattern2, 'gi'); 

str.match(regEx); 
12

नीचे का उपयोग करें:

तो अपने पैटर्न बनने के लिए है स्ट्रिंग।

var regex = new RegExp(pattern1+'|'+pattern2, 'gi'); 
str.match(regex); 
+5

चाहिए नहीं ' '/' 'जब' नई RegExp (...) 'का उपयोग करके हटाया जा सकता है? –

+0

@ बार्टकिअर्स महान बिंदु! सामान्य गलती ! एक्स) कहीं कहीं एक बड़ी सूचना जोड़ने लायक होगा :) –

6

आप है

var pattern1 = ':\\(|:=\\(|:-\\('; 
var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\('; 
1

RegExp निर्माता एक पैटर्न के साथ पाठ मिलान के लिए एक नियमित अभिव्यक्ति वस्तु बनाता है।

var pattern1 = ':\\(|:=\\(|:-\\('; 
    var pattern2 = ':\\(|:=\\(|:-\\(|:\\(|:=\\(|:-\\('; 
    var regex = new RegExp(pattern1 + '|' + pattern2, 'gi'); 
    str.match(regex); 

कोड से ऊपर मेरे लिए पूरी तरह से काम करता है ...

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