दिलचस्प पोस्ट
स्विफ्ट में ऐप प्रतिनिधि के संदर्भ में मुझे क्या मिलेगा? ऐप पर हस्ताक्षर करने के लिए मुझे किस चीजस्टोर का उपयोग किया गया था? एक निश्चित उपसमुच्चय आकार के साथ योग-सबसेट वेबकिट क्या है और यह सीएसएस से कैसे संबंधित है? यूनिट टेस्ट में यादृच्छिक डेटा? एक्शन बार पर शीर्षक के पाठ का आकार कैसे बदल सकता है? कच्चे पोस्ट डेटा प्राप्त करें रूबी में बेस 64 एन्कोडेड स्ट्रिंग में अजीब \ n jquery दस्तावेज़ के भीतर या बाहर के कार्यों को तैयार SQL सर्वर में सप्ताह संख्या से आप "सप्ताह की शुरुआत की तारीख" और "सप्ताह की समाप्ति तिथि" कैसे प्राप्त कर सकते हैं? git में नंगे साझा भंडार की अवधारणा त्रुटि को ठीक कैसे करें: रूट तत्व के बाद दस्तावेज़ में मार्कअप को अच्छी तरह से बना होना चाहिए Android पर ड्रॉएबल संसाधन से छवि को एसडी कार्ड में सहेजें त्रुटि प्रकार 3 त्रुटि: गतिविधि वर्ग {} मौजूद नहीं है PDO MySQL: PDO :: ATTR_EMULATE_PREPARES का उपयोग करें या नहीं?

जावास्क्रिप्ट regexp शाब्दिक और कन्स्ट्रक्टर के बीच अंतर

हमारे सहयोगी कॉल में एक साथी डेवलपर ने एक RegExp शब्दशः को बदलने के बाद हाल ही में एक बग किया था, और मैं सोच रहा था कि इसमें कोई अंतर क्यों है। सटीक कोड था

var parts = new RegExp("/rt:([^@]+)@(\d+)/").exec(tag); 

मूल के बनाम

 var parts = /rt:([^@]+)@(\d+)/.exec(tag); 

जब tag है, उदाहरण के लिए, rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077 , पहले (छोटी गाड़ी) कॉल null , जबकि दूसरा एक रिटर्न देता है ["rt:60C1C036-42FA-4073-B10B-1969BD2358FB@00000000077", "60C1C036-42FA-4073-B10B-1969BD2358FB", "00000000077"]

कहने की ज़रूरत नहीं है, मैंने बदलाव को बदल दिया, लेकिन मैं जानना चाहता हूं कि पहली जगह में इतना अंतर क्यों है?

वेब के समाधान से एकत्रित समाधान "जावास्क्रिप्ट regexp शाब्दिक और कन्स्ट्रक्टर के बीच अंतर"

दो समस्याएं हैं:

/ अभिव्यक्ति का हिस्सा नहीं हैं वे सीमांकक हैं , एक रीजेक्स को शाब्दिक रूप से चिह्नित करते हैं यदि आप RegExp उपयोग करते हैं, तो उन्हें निकालना होगा, अन्यथा वे स्लेश का शाब्दिक रूप से मेल खाते हैं

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

इस प्रकार, समकक्ष होगा:

 new RegExp("rt:([^@]+)@(\\d+)") 

खासकर बचने के लिए अभिव्यक्ति को थोड़ा और कठिन बना देता है यदि आप RegExp का उपयोग करना चाहते हैं। यह वास्तव में केवल तभी आवश्यक है यदि आप गतिशील अभिव्यक्ति बनाना चाहते हैं, अर्थात, यदि आप उदाहरण के लिए एक चर में संग्रहीत पाठ को शामिल करना चाहते हैं। यदि आपके पास एक निश्चित अभिव्यक्ति है, तो एक शाब्दिक /.../ लिखना आसान है और अधिक संक्षिप्त।

\d n को new RegExp कन्स्ट्रक्टर को पास करते समय बचने की आवश्यकता है तो, यह होना चाहिए

 var parts = new RegExp("rt:([^@]+)@(\\d+)").exec(tag);