IE11 में रेगेक्स संकलन की एक विशेषता के लिए परीक्षण
मैं उन ब्राउज़र में टूटी हुई नियमित अभिव्यक्ति को संकलित करने से बचने के लिए यूनिकोड रेगेक्स प्रॉपर्टी एसेड्स के लिए परीक्षण करना चाहूंगा जो इसका समर्थन नहीं करते हैं (उदाहरण के लिए IE11)। आदर्श रूप में, मैं कुछ लाइनों के साथ लिखना चाहूंगा:
if (regex supports unicode property escapes) {
return /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
} else {
return /somereplacementregex/;
}
क्या यह वास्तव में संभव है? मुझे पता है कि कुछ फीचर डिटेक्शन एपीआई के हैं, लेकिन जहां तक मुझे पता है कि रेगेक्स के लिए कोई नहीं है। वैकल्पिक रूप से अगर यह लिखने का एक और तरीका है जो संकलन को नहीं तोड़ेगा और एक त्रुटि फेंक देगा जिसे मैं पकड़ सकता हूं तो वह भी बहुत अच्छा होगा।
जवाब
यह फ़ायरफ़ॉक्स या सफारी में काम करता है; IE11 में ठीक होना चाहिए:
let regex = /somereplacementregex/;
try
{
regex = new RegExp ("\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F", "gu");
}
catch (e) { }
//
// use regex...
console.log (regex);
यदि आप किसी चीज के साथ सहज महसूस करते हैं Function
या eval
, और try/catch
... कुछ इस तरह काम करना चाहिए:
try {
return new Function('', 'return /\\p{Script=Greek}/u;')()
} catch(e) { return /asdf/g;}
ध्यान दें कि आपको बचना है \\p
क्योंकि यह एक स्ट्रिंग में निहित है। IE11 पर इसका परीक्षण किया गया और यह काम किया (घातक पार्सिंग त्रुटि के बिना वापस गिर गया)