1,问题描述:
某次项目中使用了如下正则语句:
val = val.replace(new RegExp(`(?<=.{${ellipsisStart}}).+`), '…')
在window系统下以及安卓系统下能正常运行、但是去到ipad设备下safari浏览器时,运行报错。
2,问题导致原因:
原因是,ios、mac系统不支持正则中的零宽断言。
正则零宽断言,一共4种 如:
1、(?=xxx) 例:\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分
2、(?<=xxx) 例:(?<=\bre)\w+\b会匹配以re开头的单词的后半部分
3、(?!xxx) 例:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字
4、(?<!xxx) 例:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字
上面的问题中就用到了零宽断言:?<=
3,解决方案:
根据业务重新调整正则,只需要避免使用零宽断言即可