Testen auf eine Funktion der Regex-Kompilierung in IE11
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
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);
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)