热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

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

一个H5项目中使用安卓设备一切正常,用iOS就显示 连接服务器

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

ios pt.png 正则零宽导致iOS端uni-app报错:连接服务器超时,点击重试 经验总结

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

可能会报以下错误:

Invalid regular expression: invalid group specifier name

[system] SyntaxError{}

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

原因:

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

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

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

//只显示姓名开头第一个字

data.replace(/(?<=.)./g, &#39;*&#39;)

解决:

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

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

正则(断言):

no.replace(/(?<=/d{0})/d+(?=/d{4})/, "****")

截取&拼接字符串:

"****" + no.slice(-4)

这样就可以兼容 iOS 端了。

扩展:正则零宽断言

正则位置匹配:

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

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

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

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

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

es5 就支持了先行断言

es2018 才支持后行断言

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

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

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

例:

`sinM.`.match(/sin(?=M/.)/g); // ["sin"] `M.sin`.match(/sin(?=M/.)/g); // null 

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

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

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

例:

`M.sin`.match(/sin(?!M/.)/g); // ["sin"] `sinM.`.match(/sin(?!M/.)/g); // null 

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

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

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

例:

&#39;sinM.&#39;.match(/(?<=M/.)sin/g); // null &#39;M.sin&#39;.match(/(?<=M/.)sin/g); // ["sin"] 

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

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

(?

例:

&#39;sinM.&#39;.match(/(?

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

参考文献:

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

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


推荐阅读
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了如何找到并终止在8080端口上运行的进程的方法,通过使用终端命令lsof -i :8080可以获取在该端口上运行的所有进程的输出,并使用kill命令终止指定进程的运行。 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了多因子选股模型在实际中的构建步骤,包括风险源分析、因子筛选和体系构建,并进行了模拟实证回测。在风险源分析中,从宏观、行业、公司和特殊因素四个角度分析了影响资产价格的因素。具体包括宏观经济运行和宏经济政策对证券市场的影响,以及行业类型、行业生命周期和行业政策对股票价格的影响。 ... [详细]
  • 宁德时代与第四范式达成合作,将利用第四范式的AI技术,打造规模化的人工智能平台,并将AI技术融入电池生产线。通过全流程AI技术和低门槛的AI生产工具,宁德时代实现了对生产线数据的实时分析与决策。第四范式是一家人工智能技术与服务提供商,其先知平台降低了AI在各行业内的应用门槛。宁德时代是国内具备国际竞争力的动力电池制造商之一,专注于新能源汽车动力电池系统、储能系统的研发、生产和销售。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
author-avatar
方家菱芝合
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有