Testen auf eine Funktion der Regex-Kompilierung in IE11

Jan 05 2021

Ich möchte auf Unicode Regex Property Escapes testen, um zu vermeiden, dass ein gebrochener regulärer Ausdruck in Browsern kompiliert wird, die ihn nicht unterstützen (z. B. IE11). Im Idealfall möchte ich etwas in der Art schreiben:

if (regex supports unicode property escapes) {
    return /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
} else {
    return /somereplacementregex/;
}

Ist das überhaupt möglich? Ich weiß, dass es einige APIs zur Funktionserkennung gibt, aber meines Wissens gibt es keine für Regex. Wenn es eine andere Schreibweise gibt, die die Kompilierung nicht unterbricht und einen Fehler auslöst, den ich abfangen kann, wäre das auch großartig.

Antworten

1 Expressionist Jan 05 2021 at 04:07

This works in Firefox or Safari; should be okay in 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

If you feel comfortable with something like Function or eval, and a try/catch...something like this should work:

try { 
  return new Function('', 'return /\\p{Script=Greek}/u;')() 
} catch(e) { return /asdf/g;}

Note you have to escape the \\p because it's contained in a string now. Tested this on IE11 and it worked (fell back without a fatal parsing error)