Prueba de una característica de la compilación de expresiones regulares en IE11
Me gustaría probar los escapes de propiedades Unicode Regex para evitar compilar una expresión regular rota en navegadores que no la admiten (por ejemplo, IE11). Idealmente, me gustaría escribir 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/;
}
¿Es esto posible en absoluto? Sé que hay algunas API de detección de funciones, pero hasta donde sé no hay una para expresiones regulares. Alternativamente, si hay otra forma de escribir esto que no rompa la compilación y arroje un error que pueda detectar, eso también sería genial.
Respuestas
Esto funciona en Firefox o Safari; debería estar bien en 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 te sientes cómodo con algo como Function
o eval
, y try/catch
... algo como esto debería funcionar:
try {
return new Function('', 'return /\\p{Script=Greek}/u;')()
} catch(e) { return /asdf/g;}
Tenga en cuenta que debe escapar \\p
porque ahora está contenido en una cadena. Probé esto en IE11 y funcionó (retrocedió sin un error de análisis fatal)