Testowanie funkcji kompilacji wyrażeń regularnych w IE11
Chciałbym przetestować unikody właściwości Unicode Regex, aby uniknąć kompilowania uszkodzonego wyrażenia regularnego w przeglądarkach, które go nie obsługują (na przykład IE11). Idealnie chciałbym napisać coś w stylu:
if (regex supports unicode property escapes) {
return /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
} else {
return /somereplacementregex/;
}
Czy to w ogóle możliwe? Wiem, że istnieją interfejsy API do wykrywania funkcji, ale o ile wiem, nie ma jednego dla wyrażenia regularnego. Alternatywnie, jeśli istnieje inny sposób napisania tego, który nie zepsuje kompilacji i wyrzuci błąd, który mogę złapać, to również byłby świetny.
Odpowiedzi
Działa to w przeglądarce Firefox lub Safari; powinno być w porządku w 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);
Jeśli czujesz się komfortowo z czymś takim jak Function
lub eval
, a try/catch
... coś takiego powinno działać:
try {
return new Function('', 'return /\\p{Script=Greek}/u;')()
} catch(e) { return /asdf/g;}
Zauważ, że musisz uciec przed \\p
znakiem, ponieważ jest teraz zawarty w ciągu. Przetestowałem to na IE11 i zadziałało (powróciło bez krytycznego błędu analizy)