今天遇到了一个很坑的问题,就是对于姓名字符串,第一位显示,剩余的姓名长度用‘*’号代替。
而这让人想到的立马是正则来代替。
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就不行,因为该正则包含了零宽断言,会导致页面空白,打不开,需要相对应的转换之后就可以了。
谨以此篇,献给我那带着零宽断言的正则。