javascript - 检查后向断言的兼容性
问题描述
我正在尝试检查负面后向断言的兼容性。
我自然会尝试的是:
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
有没有办法捕捉到这个错误?
您对如何检查兼容性有什么建议吗?
谢谢!
解决方案
这是一个语法错误,在最初解析代码时抛出,而不是在模式运行时抛出,因此try
/catch
不会捕获它。
可以通过将带有后视的字符串传递给正则表达式构造函数来动态检查语法:
try {
new RegExp('(?<!x)');
console.log('Supported');
} catch (e) {
console.log('Not Supported');
}
但这很奇怪。一旦您知道它是否受支持,要在同一脚本的其他地方使用它,您要么必须在任何地方使用 RegExp 构造函数,这不是一个好主意- 要么添加另一个包含后向正则表达式文字的脚本标记。
更好的选择是完全避免后视并使用替代方法,例如捕获组。用没有后视的模式替换后视几乎总是很容易的。
推荐阅读
- sql - SQL(SQL/Oracle)使用序列从选择语句中插入值
- classification - 在分类中使用线性判别分析和 k 最近邻时,哪个更好?
- node.js - 在具有不同 publicPath 的 webpack 中两次注入相同的资产
- fortran - 在 Fortran 不好的做法中声明虚拟参数的大小(元素数量)
- python-3.x - 使用子进程从标准输出读取数据时出现意外的额外反斜杠
- python - 从两个多维 numpy 数组复制到另一个具有不同形状的数组
- go - Golang 序列化 go-radix Tree 到文件?
- javascript - setTimeout 回调执行后清除超时
- python - 'VoiceClient' 对象不能用 discord API/youtube_dl 调用
- python - Python authlib flask - 如何处理刷新令牌?