Prueba de una característica de la compilación de expresiones regulares en IE11

Jan 05 2021

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

1 Expressionist Jan 05 2021 at 04:07

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

Si te sientes cómodo con algo como Functiono 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 \\pporque ahora está contenido en una cadena. Probé esto en IE11 y funcionó (retrocedió sin un error de análisis fatal)