首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >正则零宽导致iOS端uni-app报错:连接服务器超时,点击重试

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

作者头像
德顺
发布于 2023-08-25 04:54:34
发布于 2023-08-25 04:54:34
1.8K00
代码可运行
举报
文章被收录于专栏:前端资源前端资源
运行总次数:0
代码可运行

一个 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
代码运行次数:0
运行
AI代码解释
复制
//只显示姓名开头第一个字

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

解决:

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

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

正则(断言):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
no.replace(/(?<=\d{0})\d+(?=\d{4})/, "****")

截取&拼接字符串:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"****" + no.slice(-4)

这样就可以兼容 iOS 端了。

扩展:正则零宽断言

正则位置匹配:

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

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

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

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

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

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

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

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

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

例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`sinM.`.match(/sin(?=M\.)/g); // ["sin"] `M.sin`.match(/sin(?=M\.)/g); // null 复制代码

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

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

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

例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`M.sin`.match(/sin(?!M\.)/g); // ["sin"] `sinM.`.match(/sin(?!M\.)/g); // null 复制代码

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

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

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

例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'sinM.'.match(/(?<=M\.)sin/g); // null 'M.sin'.match(/(?<=M\.)sin/g); // ["sin"] 复制代码

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

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

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

例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
正则表达式零宽断言详解(?=,?<=,?!,?<!)
在使用正则表达式时,有时我们需要捕获的内容前后必须是特定内容,但又不捕获这些特定内容的时候,零宽断言就起到作用了 正则表达式零宽断言: 零宽断言是正则表达式中的难点,所以重点从匹配原理方面进行分析。零宽断言还有其他的名称,例如"环视"或者"预搜索"等等,不过这些都不是我们关注的重点。 我很强,我想直接看例子上手用 一.基本概念: 零宽断言正如它的名字一样,是一种零宽度的匹配,它匹配到的内容不会保存到匹配结果中去,最终匹配结果只是一个位置而已。 作用是给指定位置添加一个限定条件,用来规定此位置之前或者之后的字
mcq
2018/06/20
7.4K0
正则表达式快速入门
说起正则表达式( Regular Expression ),很多人都会头疼,记命令都要记得吐血,不过正则表达式的效率真的是高的一比,完全可以从文本中筛选出你想要的任何内容,所以还是得学啊,并且如果没有正则表达式的话, Linux 也不会那么高效。这玩意以前已经学习过一遍了,没有怎么练习加上过去了好久又给全忘了,因此又得重新再学一遍 == ,其实也没有太多东西,但是要经常练习才能熟练。
棒棒鸡不棒
2022/09/01
6660
Excel 正则 REGEXEXTRACT
Excel 于今年推出了一系列正则函数,给文本处理带来的极大的便捷性,今天咱们就来看看最常用的 REGEXEXTRACT 是怎么使用的。
披头
2024/11/21
5010
Excel 正则 REGEXEXTRACT
正则表达式,再也不用依赖Qt了
您好,我是昊天,C++程序员,多年的音视频开发经验,熟悉Qt、FFmpeg、OpenGL。如果你对这些感兴趣,欢迎关注我的公众号 由于AI IDE的普及,愈发感觉基础的重要性,后续我会用一系列的文章,讲解C++的基础知识点,本文是第一篇。
程序员的园
2025/07/16
790
正则表达式,再也不用依赖Qt了
锱铢必较:程序员生存指南——正则表达式中使用断言
想让一个名词听起来特别高大上,最简单的方法就是加很多修饰语。比如多源异构群智协同负反馈深度神经网络(当然了,这是我瞎编的)。在正则表达式中,有一种东西叫断言,它的修饰语也很多: 零宽正向先行断言 零宽负向先行断言 零宽正向后行断言 零宽负向后行断言 断言之所以叫“零宽”,是因为它们不会消费字符串,可以理解为断言匹配的是位置。 断言之所以叫“断言”,是因为它们用来产生一个True\False的判定结果。 正向和负向分别指的是“应该出现”和“不应该出现”。 先行和后行分别指的是“此位置之后”和“此位置之前
大神带我来搬砖
2018/06/06
6770
什么?前瞻断言和后瞻断言居然可以这么牛?
JavaScript 中的前瞻断言(lookahead)和后瞻断言(lookbehind)相信用过的小伙伴就知道它的威力了,在一些特定的需求场景下,可以做到四两拨千斤的作用,今天让我们来盘点一下在 JavaScript 正则表达式中这两个秘密武器吧。
前端蛋卷
2024/07/17
3260
什么?前瞻断言和后瞻断言居然可以这么牛?
91.精读《正则 ES2018》
本周精读的文章是 regexp-features-regular-expressions。
黄子毅
2022/03/14
4430
正则表达式快速入门
正则表达式(Regular Expression),又称规则表达式,在代码中常简写作 regex、regexp 或 RE。正则表达式通常用来检索、替换那些符合某个模式(规则)的文本。常用的程序设计语言都支持正则表达式,比如 C++11 也将正则表达式纳入标准,Perl、Python、PHP、Javascript、Ruby 等脚本语言都内置了强大的正则表达式处理引擎,Java、C#、Go、Delphi 等编译型语言都支持正则表达式。
恋喵大鲤鱼
2022/05/09
1.3K0
grep正则获取特定内容之零宽断言
(匹配宽度为零,满足一定的条件/断言) 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像 \b ^ $ < > 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。 断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。
王先森sec
2023/04/24
1.7K0
ES2018新特性学习
ECMAScript 2018 (ES9) 在 6 月底正式发布,带来了很多新特性。关于 ES7 和 ES8 相关的知识,可以查看这篇文章 ES2016 和 ES2017 学习。目前大部分 ES7 和 ES8 的特性都得到主流浏览器的支持,而 ES9 的新特性还未能实现很好的兼容性。
李振
2021/11/26
7260
「思维导图学前端 」初中级前端值得收藏的正则表达式知识点扫盲
本文是思维导图学前端系列第二篇,主题是正则表达式。首先还是想说下我的出发点,之所以自己画一遍思维导图,是因为我整理的思维导图里加入了自己的理解,更容易记忆。之前也看过很多别人整理的思维导图,虽然有点拨之用,但是要想吸收个二三分营养却也是很难。所以,建议本系列的读者在阅读文章之后,在时间允许的情况下,可以考虑自行整理知识点,便于更好地理解和吸收。
程序员白彬
2020/07/16
5390
正则表达式的梳理和练习笔记
正则表达式的重要性不言而喻,平时写的时候都是拼拼凑凑感觉还是不太好,趁着今天做一个梳理,要让正则的用法深入血液才好。
雪碧君
2023/02/15
5790
正则表达式真的很骚,可惜你不会写!
正则表达式在几乎所有语言中都可以使用,无论是前端的JavaScript、还是后端的Java、c#。他们都提供相应的接口/函数支持正则表达式。
Java团长
2019/07/11
5770
【高级篇】正则表达式之零宽断言详解
零宽断言,大多地方这样定义它,用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像 \b ^ $ \< > 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。我的理解是在一个限定位置的字符串之前或之后进行匹配查找。所以零宽断言,执行过程分两种情况,如果是正向断言,应该是这样的,第一步,判断判断断言是否为真(即是否满足一定条件)第二步,如果满足条件,则进行下一步查找匹配。如果是反向断言,第一步还是按照正则表达式顺序去匹配。第二步,遇到反向代言,判断是否满足反之代言。
挨踢小子部落阁
2023/03/16
1.5K0
【高级篇】正则表达式之零宽断言详解
Python 正则表达式急速入门
正则表达式在程序开发中会经常用到,比如数据(格式)验证、替换字符内容以及提取字符串内容等等情况都会用到,但是目前许多开发人员对于正则表达式只是处于了解或者是基本会用的阶段。一旦遇到大批量使用正则表达式的情况(例如网络爬虫)可以说基本上就抓瞎了。这篇文章我将带领大家利用 Python 来学习一下正则表达式。在阅读这篇文章前你需要掌握 Python 基础知识,或者具有其他开发语言的基础知识也可以,因为基本上每种语言使用正则表达式的方式都是类似的。
喵叔
2020/09/08
5780
Python 正则表达式急速入门
正则表达式在 ES2018 中的新写法 [每日前端夜话0x25]
摘要:如果你曾用 JavaScript 做过复杂的文本处理和操作,那么你将会对 ES2018 中引入的新功能爱不释手。 在本文中,我们将详细介绍第 9 版标准如何提高 JavaScript 的文本处理能力。
疯狂的技术宅
2019/03/27
1.1K0
正则表达式在 ES2018 中的新写法  [每日前端夜话0x25]
JavaScript 正则表达式介绍
正则表达式就是一个用来描述字符模式的对象。它被用来在文本中执行模式匹配(pattern-matching)以及”查找-替换”(search-and-replace)的任务。javascript中正则的风格类似Perl中正则的风格。
前端GoGoGo
2018/08/27
6490
Python正则表达式:面试中的难点与解题思路
Python正则表达式(regex)作为文本处理的强大工具,在编程面试中占据重要地位。然而,其复杂性和灵活性也使得它成为许多候选人的痛点。本文将深入剖析Python正则表达式面试中的难点问题,揭示易错点,并提供解题思路与代码示例,助您在面试中从容应对。
Jimaks
2024/04/18
1700
简单粗暴的正则表达式笔记
正则表达式是用来描述具有一定特征的字符串的特殊字符串。 Regular Expression。
刘大猫
2024/12/03
1920
【愚公系列】Java教学课程 042-正则表达式
正则表达式(Regular Expression,简称Regex或RegExp)是一个用来描述、匹配、搜索某个文本或字符串的规则或模式。它通常由一些特定的字符和操作符组成,可以用来匹配和过滤各种文本信息。正则表达式可以用于实现文本的查找、替换、过滤、验证等操作,是编程和数据处理领域中非常有用的工具。
愚公搬代码
2025/06/01
760
相关推荐
正则表达式零宽断言详解(?=,?<=,?!,?<!)
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验