火狐浏览器正则表达式兼容问题

236 阅读1分钟

1.问题:火狐浏览器报错

image.png

2.原因:

旧版火狐不支持正则,先行断言(lookahead),先行断言的部分需要单独取出来进行判断,因此正则表达式要使用正则对象的方式 new RegExp

火狐、IE、IOS不支持以下写法 常用零宽断言:

?!      零宽负向先行断言
?=     零宽先行断言
?<=   零宽后行断言
?<!    零宽负向后行断言

前瞻就是一种条件判断,好比if语句:

(?=exp)正向前瞻 匹配后面满足表达式exp的位置

(?!exp) 负向前瞻 匹配后面不满足表达式exp的位置

3.解决

let reg = /ab?<=cd/
// 改写成
let reg = new RegExp('ab(?<=cd)')

image.png