测试 IE11 中的正则表达式编译功能
Testing for a feature of regex compilation in IE11
我想测试 Unicode Regex Property Escapes 以避免在不支持它的浏览器(例如 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,但据我所知,没有一个用于正则表达式。或者,如果有另一种不会破坏编译并会抛出我可以捕获的错误的写法,那也很好。
如果您对 Function
或 eval
和 try/catch
这样的东西感到满意...这样的东西应该可以工作:
try {
return new Function('', 'return /\p{Script=Greek}/u;')()
} catch(e) { return /asdf/g;}
请注意,您必须对 \p
进行转义,因为它现在包含在一个字符串中。在 IE11 上测试了这个并且它有效(没有致命的解析错误回退)
这适用于 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);
我想测试 Unicode Regex Property Escapes 以避免在不支持它的浏览器(例如 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,但据我所知,没有一个用于正则表达式。或者,如果有另一种不会破坏编译并会抛出我可以捕获的错误的写法,那也很好。
如果您对 Function
或 eval
和 try/catch
这样的东西感到满意...这样的东西应该可以工作:
try {
return new Function('', 'return /\p{Script=Greek}/u;')()
} catch(e) { return /asdf/g;}
请注意,您必须对 \p
进行转义,因为它现在包含在一个字符串中。在 IE11 上测试了这个并且它有效(没有致命的解析错误回退)
这适用于 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);