2013-07-25 16 views
20

नीचे दिए गए रेगेक्स में, \s एक अंतरिक्ष चरित्र को दर्शाता है। मैं रेगेक्स पार्सर की कल्पना करता हूं, स्ट्रिंग के माध्यम से जा रहा है और \ देखता है और जानता है कि अगला चरित्र विशेष है।रेगेक्स कन्स्ट्रक्टर को डबल से बचने की आवश्यकता क्यों है?

लेकिन ऐसा नहीं है क्योंकि डबल एस्केप की आवश्यकता है।

यह क्यों है?

var res = new RegExp('(\\s|^)' + foo).test(moo); 

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

+0

याद रखें, ऐसा नहीं है कि जावा या Regexp निर्माता को स्पष्टीकरण की आवश्यकता है, यह संकलक (या पार्सर) है। – GJK

+1

पहले से ही सही उत्तरों में जोड़ने के लिए: ध्यान दें कि यदि आप जावास्क्रिप्ट में एक RegExp अक्षर लिखते हैं, तो आपको * बैकस्लैश से बचने की आवश्यकता नहीं है, जैसा कि आपको संदेह होगा: '/ (\ s | ^) /' –

उत्तर

22

आप RegExp कन्स्ट्रक्टर को स्ट्रिंग पास करके नियमित अभिव्यक्ति का निर्माण कर रहे हैं।

आपको \ से बचने की आवश्यकता है ताकि आपकी स्ट्रिंग शाब्दिक इसे नियमित अभिव्यक्ति में बदलने से पहले इसे डेटा के रूप में व्यक्त कर सके।

12

कोड जहाँ आप एक स्ट्रिंग बना रहे हैं अंदर, बैकस्लैश भागने दृश्यों की तरह \t, \n, \", आदि उनके जावास्क्रिप्ट समकक्ष में (अनुवाद किया जाएगा टैब, न्यू लाइन जिसका मतलब है कि पहले एक जावास्क्रिप्ट एस्केप वर्ण है, उद्धरण, आदि), और यह स्ट्रिंग का एक हिस्सा बनाया जाएगा। डबल बैकस्लैश वास्तविक स्ट्रिंग में एक बैकस्लैश का प्रतिनिधित्व करता है, इसलिए यदि आप स्ट्रिंग में बैकस्लैश चाहते हैं, तो आप पहले उस से बचें।

तो जब आप var someString = '(\\s|^)' कहकर स्ट्रिंग उत्पन्न करते हैं, तो आप वास्तव में क्या कर रहे हैं (\s|^) मान के साथ एक वास्तविक स्ट्रिंग बना रहा है।

3

रेगेक्स को \s की स्ट्रिंग प्रस्तुति की आवश्यकता है, जो जावास्क्रिप्ट में शाब्दिक "\\s" का उपयोग करके उत्पादित किया जा सकता है।

यहाँ वर्णन करने के लिए एक जीवित उदाहरण है क्यों "\s" पर्याप्त नहीं है:

alert("One backslash:   \s\nDouble backslashes: \\s");

नोट कैसे एक अतिरिक्त \\s से पहले उत्पादन बदल जाता है।

3

\ विशेष वर्णों से बचने के लिए स्ट्रिंग्स में उपयोग किया जाता है। अगर आप अपनी स्ट्रिंग में बैकस्लैश चाहते हैं (उदा। \ In \ s के लिए) आपको बैकस्लैश के माध्यम से इसे बचाना होगा। तो \ \ बन जाता है।

संपादित करें: यहां तक ​​कि इसे यहां भी करना था, क्योंकि मेरे उत्तर में \\ बदल गया।

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

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