Testando um recurso de compilação de regex no IE11
Gostaria de testar o Unicode Regex Property Escapes para evitar a compilação de uma expressão regular quebrada em navegadores que não a suportam (por exemplo, IE11). Idealmente, eu gostaria de escrever algo como:
if (regex supports unicode property escapes) {
return /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
} else {
return /somereplacementregex/;
}
Isso é possível em tudo? Eu sei que existem algumas APIs de detecção de recursos, mas até onde eu sei, não há uma para regex. Alternativamente, se houver outra maneira de escrever isso que não interrompa a compilação e geraria um erro que eu possa detectar, também seria ótimo.
Respostas
Isso funciona no Firefox ou Safari; deve estar bem no 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);
Se você se sentir confortável com algo como Function
ou eval
, e try/catch
... algo assim deve funcionar:
try {
return new Function('', 'return /\\p{Script=Greek}/u;')()
} catch(e) { return /asdf/g;}
Observe que você precisa escapar de \\p
porque agora está contido em uma string. Testei no IE11 e funcionou (retornou sem um erro fatal de análise)