IE11での正規表現コンパイルの機能のテスト

Jan 05 2021

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 Jan 05 2021 at 04:07

これは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 Jan 05 2021 at 01:13

Functionまたはのようなものに慣れている場合eval、そしてtry/catch...このようなものが機能するはずです:

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

\\pこれは文字列に含まれているため、エスケープする必要があることに注意してください。IE11でこれをテストし、機能しました(致命的な解析エラーなしでフォールバックしました)