Testando um recurso de compilação de regex no IE11

Jan 05 2021

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

1 Expressionist Jan 05 2021 at 04:07

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

Se você se sentir confortável com algo como Functionou 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 \\pporque agora está contido em uma string. Testei no IE11 e funcionou (retornou sem um erro fatal de análise)