Test d'une fonctionnalité de compilation regex dans IE11
Je voudrais tester les échappements de propriété Unicode Regex pour éviter de compiler une expression régulière cassée dans les navigateurs qui ne la prennent pas en charge (par exemple IE11). Idéalement, j'aimerais écrire quelque chose du genre:
if (regex supports unicode property escapes) {
return /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
} else {
return /somereplacementregex/;
}
Est-ce possible? Je sais qu'il existe des API de détection de fonctionnalités, mais pour autant que je sache, il n'y en a pas une pour regex. Sinon, s'il y a une autre façon d'écrire ceci qui ne briserait pas la compilation et générerait une erreur que je peux attraper, ce serait également génial.
Réponses
Cela fonctionne dans Firefox ou Safari; devrait être correct dans 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);
Si vous vous sentez à l'aise avec quelque chose comme Function
ou eval
, et un try/catch
... quelque chose comme ça devrait fonctionner:
try {
return new Function('', 'return /\\p{Script=Greek}/u;')()
} catch(e) { return /asdf/g;}
Notez que vous devez échapper au \\p
car il est maintenant contenu dans une chaîne. Testé cela sur IE11 et cela a fonctionné (est retombé sans erreur d'analyse fatale)