IE11 में रेगेक्स संकलन की एक विशेषता के लिए परीक्षण

Jan 05 2021

मैं उन ब्राउज़र में टूटी हुई नियमित अभिव्यक्ति को संकलित करने से बचने के लिए यूनिकोड रेगेक्स प्रॉपर्टी एसेड्स के लिए परीक्षण करना चाहूंगा जो इसका समर्थन नहीं करते हैं (उदाहरण के लिए 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/;
}

क्या यह वास्तव में संभव है? मुझे पता है कि कुछ फीचर डिटेक्शन एपीआई के हैं, लेकिन जहां तक ​​मुझे पता है कि रेगेक्स के लिए कोई नहीं है। वैकल्पिक रूप से अगर यह लिखने का एक और तरीका है जो संकलन को नहीं तोड़ेगा और एक त्रुटि फेंक देगा जिसे मैं पकड़ सकता हूं तो वह भी बहुत अच्छा होगा।

जवाब

1 Expressionist Jan 05 2021 at 04:07

यह फ़ायरफ़ॉक्स या सफारी में काम करता है; 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);
1 David784 Jan 05 2021 at 01:13

यदि आप किसी चीज के साथ सहज महसूस करते हैं Functionया eval, और try/catch... कुछ इस तरह काम करना चाहिए:

try { 
  return new Function('', 'return /\\p{Script=Greek}/u;')() 
} catch(e) { return /asdf/g;}

ध्यान दें कि आपको बचना है \\pक्योंकि यह एक स्ट्रिंग में निहित है। IE11 पर इसका परीक्षण किया गया और यह काम किया (घातक पार्सिंग त्रुटि के बिना वापस गिर गया)