首页 > 解决方案 > 检查后向断言的兼容性

问题描述

我正在尝试检查负面后向断言的兼容性。

我自然会尝试的是:

try {
     /((?<!test)$)/.test('test'); 
     // if it doesn't throw an error it is supported
}
catch (e) {
     // if it does throw an error it is not supported
}

但由于某种原因,它崩溃并且没有捕捉到SyntaxError: invalid regexp group

有没有办法捕捉到这个错误?

您对如何检查兼容性有什么建议吗?

谢谢!

标签: javascriptregex

解决方案


这是一个语法错误,在最初解析代码时抛出,而不是在模式运行时抛出,因此try/catch不会捕获它。

可以通过将带有后视的字符串传递给正则表达式构造函数来动态检查语法:

try {
  new RegExp('(?<!x)');
  console.log('Supported');
} catch (e) {
  console.log('Not Supported');
}

但这很奇怪。一旦您知道它是否受支持,要在同一脚本的其他地方使用它,您要么必须在任何地方使用 RegExp 构造函数,这不是一个好主意- 要么添加另一个包含后向正则表达式文字的脚本标记。

更好的选择是完全避免后视并使用替代方法,例如捕获组。用没有后视的模式替换后视几乎总是很容易的。


推荐阅读