零宽断言?iOS手机白屏?

288 阅读1分钟

今天遇到了一个很坑的问题,就是对于姓名字符串,第一位显示,剩余的姓名长度用‘*’号代替。

而这让人想到的立马是正则来代替。

let name1 = '张三'
let name2 = '欧利克斯'

let name1Str = name1.replace(/(?<=.)./g, '*')
console.log(name1Str) //=> 张*

let name2Str = name2.replace(/(?<=.)./g, '*')
console.log(name2Str) //=> 欧***

而这万万没有想到,竟是这一正则,害我找问题找了一下午。

在npm run serve后,一切运行正常,浏览器跑的也是相当顺畅。美哉哉呀!

其实这个是要放在小程序的web-view中加载的h5页面,于是乎,我打包发布,在小程序的模拟器上跑的也是相当顺畅。

可是到了真机,用安卓手机一扫,跑的也是相当顺畅,一到iOS手机,完蛋,白屏!!!

我刚开始也是坚信,我的代码问题应该没事啊!既然在浏览器、安卓机都可以,那代码肯定没问题啊!!! 

太过于自信。

于是,我把项目vconsole打开,真机调试,三下五除二的操作,看到了报错打印。

Error SyntaxError: Invalid regular expression: invalid group specifier name

原来是:如果正则表达式中包含零宽断言的话 , 在安卓手机上正常 , 但是在iOS上会报这个错误。

常用零宽断言:?<=、?<!、?!、?=

  这种写法在安卓是正常的,iOS就不行,因为该正则包含了零宽断言,会导致页面空白,打不开,需要相对应的转换之后就可以了。

谨以此篇,献给我那带着零宽断言的正则。