Test d'une fonctionnalité de compilation regex dans IE11

Jan 05 2021

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

1 Expressionist Jan 05 2021 at 04:07

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);
1 David784 Jan 05 2021 at 01:13

Si vous vous sentez à l'aise avec quelque chose comme Functionou 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 \\pcar il est maintenant contenu dans une chaîne. Testé cela sur IE11 et cela a fonctionné (est retombé sans erreur d'analyse fatale)