JavaScript 正则之零宽反向断言的浏览器兼容性问题

2,304 阅读1分钟

关于正则表达式的零宽断言正则的详细说明,可以参考这几篇文章:

juejin.cn/post/699142…

blog.51cto.com/cnn237111/7…

这里主要记录一下反向断言到了Chrome 62才支持,参考:

github.com/tc39/propos…

github.com/tc39/propos…

ECMAScript2018才开始支持 lookbehind.

(补充:named capturing group也是类似的情况: stackoverflow.com/questions/2…)

chrome62版本之前的正则零宽反向断言,JS不支持。(补充一下,62之前的Chrome同样不支持具名捕获组named capturing group) 报错如下:

regexError.png

替代方案,可以参考:

stackoverflow.com/questions/7…

也可以用普通的方式分成几步实现同样的功能。

比如

let regExp = new RegExp('(?<=get\\()[A-Za-z0-9_\\$]+(?=\\))');
let ret = 'get(key)'.match(regExp);
console.log(ret[0]); // 62版本之后可以执行出结果 'key',62版本之前会报错。

可以替换成:

let regExp = new RegExp('[get\\(][A-Za-z0-9_\\$]+[\\)]{1}');
let ret = 'get(key)'.match(regExp); // 结果是 '(key)'
let _value = ret[0].substring(1, attr[0].length - 1); // 去掉括号
console.log(_value);