IE11での正規表現コンパイルの機能のテスト
Unicode Regexプロパティエスケープをテストして、それをサポートしていないブラウザー(IE11など)で壊れた正規表現をコンパイルしないようにしたいと思います。理想的には、次のようなことを書きたいと思います。
if (regex supports unicode property escapes) {
return /\p{Emoji_Modifier_Base}\p{Emoji_Modifier}?|\p{Emoji_Presentation}|\p{Emoji}\uFE0F/gu;
} else {
return /somereplacementregex/;
}
これは可能ですか?いくつかの機能検出APIがあることは知っていますが、私が知る限り、正規表現用のAPIはありません。あるいは、コンパイルを中断せず、私がキャッチできるエラーをスローする別の書き方がある場合は、それも素晴らしいでしょう。
回答
1 Expressionist
これはFirefoxまたはSafariで機能します。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
Function
またはのようなものに慣れている場合eval
、そしてtry/catch
...このようなものが機能するはずです:
try {
return new Function('', 'return /\\p{Script=Greek}/u;')()
} catch(e) { return /asdf/g;}
\\p
これは文字列に含まれているため、エスケープする必要があることに注意してください。IE11でこれをテストし、機能しました(致命的な解析エラーなしでフォールバックしました)