前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >正则零宽导致iOS端uni-app报错:连接服务器超时,点击重试

正则零宽导致iOS端uni-app报错:连接服务器超时,点击重试

作者头像
德顺
发布2023-08-25 12:54:34
9520
发布2023-08-25 12:54:34
举报
文章被收录于专栏:前端资源前端资源

一个 H5 项目中使用安卓设备一切正常,用 iOS 就显示 连接服务器超时,点击屏幕重试。

排查了半天,原来是正则引起的。

可能会报以下错误:

Invalid regular expression: invalid group specifier name

[system] SyntaxError{}

Info Warn Error SyntaxError: Invalid regular expression: invalid group specifier name

原因:

iOS 不支持零宽断言,如果正则表达式中包含零宽断言 , 在安卓手机上正常 , 但是在 iOS 上就会报错。

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

例如:只显示姓名开头第一个字(正则),格式:张**

代码语言:javascript
复制
//只显示姓名开头第一个字

data.replace(/(?<=.)./g, '*')

解决:

不使用零宽断言,可以使用截取&拼接字符串的方式,如果实现比较复杂的效果可以自己封装一个方法。

例如:我要截取银行卡后四位,前面加星号。

正则(断言):

代码语言:javascript
复制
no.replace(/(?<=\d{0})\d+(?=\d{4})/, "****")

截取&拼接字符串:

代码语言:javascript
复制
"****" + no.slice(-4)

这样就可以兼容 iOS 端了。

扩展:正则零宽断言

正则位置匹配:

零宽:只匹配位置,在匹配过程中,不占用字符,所以被称为零宽。

先行:正则引擎在扫描字符的时候,从左往右扫描,匹配扫描指针未扫描过的字符,先于指针,故称先行。

后行:匹配指针已扫描过的字符,后于指针到达该字符,故称后行,即产生回溯。

正向:即匹配括号中的表达式。

负向:不匹配括号中的表达式。

es5 就支持了先行断言 es2018 才支持后行断言

零宽正向先行断言,又称正向向前查找(positive lookhead)

注意: .在正则里面代表匹配除换行符,回车符等少数空白字符之外的任何字符,匹配其时需要转义

(?=pattern):某位置后面紧接着的字符序列要匹配 pattern

例:

代码语言:javascript
复制
`sinM.`.match(/sin(?=M\.)/g); // ["sin"] `M.sin`.match(/sin(?=M\.)/g); // null 复制代码

第一个 sin 会匹配,因为他后面有 pattern

零宽负向先行断言,又称负向向前查找(negative lookhead)

(?!pattern):某位置后面紧接着的字符序列不能匹配 pattern

例:

代码语言:javascript
复制
`M.sin`.match(/sin(?!M\.)/g); // ["sin"] `sinM.`.match(/sin(?!M\.)/g); // null 复制代码

第一个 sin 会匹配,因为他后面没有 pattern

零宽正向后行断言,又称正向向后查找(positive lookbehind)

(?<=pattern):某位置前面紧接着的字符序列要匹配 pattern

例:

代码语言:javascript
复制
'sinM.'.match(/(?<=M\.)sin/g); // null 'M.sin'.match(/(?<=M\.)sin/g); // ["sin"] 复制代码

第二个 sin 会匹配,因为它前面有 pattern

零宽负向后行断言,又称负向向后查找(negative lookbehind)

(?<!pattern):某位置前面紧接着的字符序列不能匹配 pattern

例:

代码语言:javascript
复制
'sinM.'.match(/(?<!M\.)sin/g); // ["sin"] 'M.sin'.match(/(?<!M\.)sin/g); // null 复制代码

第一个 sin 会匹配,因为它前面没有 pattern

参考文献:

关于正则位置匹配(断言)的技巧

未经允许不得转载:w3h5-Web前端开发资源网 » 正则零宽导致iOS端uni-app报错:连接服务器超时,点击重试

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-13),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可能会报以下错误:
  • 原因:
  • 解决:
  • 扩展:正则零宽断言
    • 正则位置匹配:
      • 零宽正向先行断言,又称正向向前查找(positive lookhead)
        • 零宽负向先行断言,又称负向向前查找(negative lookhead)
          • 零宽正向后行断言,又称正向向后查找(positive lookbehind)
            • 零宽负向后行断言,又称负向向后查找(negative lookbehind)
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档