2014-05-02 11 views
9

क्या नियमित अभिव्यक्ति में एक डेलीमीटर के रूप में / (आगे स्लैश) से भिन्न वर्ण का उपयोग करने के लिए जावास्क्रिप्ट में कोई तरीका है? अधिकतर अन्य भाषाओं में ऐसा करने का एक तरीका है।जावास्क्रिप्ट regex delimiters (स्लैश आगे बढ़ाने के लिए कोई विकल्प)?

उदाहरण के लिए, पर्ल:

[email protected]@ 

हम सिर्फ उपयोग करने के लिए "/" जावास्क्रिप्ट में कैद कर रहे हैं?

उत्तर

7

जावास्क्रिप्ट में नियमित अभिव्यक्तियों का उपयोग करने के सरल तरीके से आप इसे / चरित्र से हटा देंगे। हालांकि, यदि आप वैश्विक ऑब्जेक्ट RegExp का उपयोग करना चाहते हैं, तो आपको स्ट्रिंग में सामान्य स्ट्रिंग से बचने वाले नियमों का उपयोग करके कन्स्ट्रक्टर के पहले तर्क के रूप में पारित करने की आवश्यकता होगी। निम्नलिखित समकक्ष हैं। अन्य उत्तर ध्यान दें /foo/

रूप में, आप भी एक चर new Regexp("foo") का उपयोग करने के लिए रेगुलर एक्सप्रेशन असाइन कर सकते हैं:

// shorthand way. 
var re = /\w+/; 
// a way to pass a string in 
var re = new RegExp("\\w+"); 
+2

धन्यवाद। यह मेरे लिए होता है कि डबल-एस्केपिंग एक बड़ा दर्द है, इसलिए मुझे लगता है कि मैं चरित्र "/" के लिए एकल एस्केप का उपयोग करके और "/" को डिलीमीटर के रूप में उपयोग कर रहा हूं। यह बहुत अच्छा होगा अगर किसी ने जावास्क्रिप्ट में रेगेक्स से बचने के लिए लाइब्रेरी या विशेष फ़ंक्शन लिखा हो! – pepper

+0

मुझे [XRegExp] (http://xregexp.com/) का उपयोग करके सफलता मिली है। – L0j1k

6

क्या हम जावास्क्रिप्ट में बस "/" का उपयोग करने के लिए सीमित हैं?

नहीं वास्तव में .. आप new RegExp (string) constructor.

var re = new RegExp (string); 

का उपयोग कर बस ध्यान रखें कि यह एक भागने के बजाय भागने दोगुना करने की आवश्यकता होगी में रखने के द्वारा किसी भी regex परिसीमक का उपयोग करके बच सकते हैं।

+2

अच्छा जवाब, लेकिन मुझे अभी भी यह जानना है कि क्या मैं उपरोक्त मेरे वाक्यविन्यास में "/" से एक अलग वर्ण का उपयोग कर सकता हूं। अगर मुझे इस तरह रेगेक्स घोषित करना है, तो इसमें अधिक टाइपिंग होती है। मैं रेगेक्स वन-लाइनर लिखने में लगने वाले समय को कम करने की कोशिश कर रहा हूं। – pepper

+3

@pepper आप नहीं कर सकते। एक जावास्क्रिप्ट पार्सर सभी प्रकार के गांठों में बंधे होते हैं क्योंकि यह '/' डिलीमीटर के साथ होता है; किसी भी अन्य चरित्र को गंभीर रूप से समस्याग्रस्त होने की इजाजत दी जाएगी। – Pointy

+0

आपको नए RegExp (स्ट्रिंग) के साथ रेगेक्स को तुरंत चालू करने और समाधान के सभी बार दो विशेष वर्णों से बचने की आवश्यकता है। – pepper

5

जावास्क्रिप्ट में, यदि आप एक regexp इनलाइन करना चाहते हैं, अपने ही एकमात्र विकल्प forwardslash सीमांकक है।

एकाधिक डिलीमीटर का उपयोग करना निश्चित रूप से एक पर्ल चीज है। पर्ल में आप लगभग किसी भी चरित्र परिसीमक के रूप में, उदाहरण के लिए तार के साथ उपयोग कर सकते हैं:

ठेठ वाक्य रचना एकल उद्धरण का उपयोग कर - 'dipset'

क्ष समारोह का उपयोग कर - q(dipset)q!dipset!q%dipset%

क्या यह कुछ का उत्पादन पठनीय संदर्भ पर निर्भर है .. यह अच्छा है कि पर्ल आपको ऐसा करने देता है, अगर परिणाम कुछ पठनीय है। उदाहरण के लिए, नियमित अभिव्यक्ति पर्याप्त रूप से अपठनीय हैं, बिना अंदर से बचने वाली बैकस्लाश का गुच्छा।

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