首页 > 其他分享 >safari浏览器正则表达式兼容问题

safari浏览器正则表达式兼容问题

时间:2024-02-18 17:01:23浏览次数:20  
标签:浏览器 断言 兼容问题 正则表达式 正则 safari 零宽


发现问题
解决问题
1、正则格式不对
2、IOS,MAC不支持零宽断言

 


发现问题
在开发过程中难免会使用正则表达式来匹配或替换一些文本(字符串),原本以为在不同的浏览器,正则表达式是一样的。然而在实际开发测试中却遇到了问题。

一般正则表达式使用的谷歌浏览器,火狐浏览器都正常,而在safari浏览器会莫名的报错:

 

SyntaxError: Invalid regular expression: invalid group specifier name


意思就是,正则表达式无效:组说明符名称无效。

当初所用表达式如下:

let preg = /(?<=>)(.|\s)*?(?=<\/?\w+[^<]*>)/g;


这也是一般的写法。

 

解决问题
报出这个错误的原因有两点:


1、正则格式不对
尝试修改,首先改变正则的写法,如下:

let preg = new RegExp("(?<=>)(.|\\s)*?(?=<\\/?\\w+[^<]*>)", 'g');


执行后还是会报相同的错误:

 

2、IOS,MAC不支持零宽断言
那什么是零宽断言?

用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。最好还是拿例子来说明吧: 断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。

正则零宽断言,一共4种
1、(?=xxx) 例:\b\w+(?=ing\b),匹配以ing结尾的单词的前面部分
2、(?<=xxx) 例:(?<=\bre)\w+\b会匹配以re开头的单词的后半部分
3、(?!xxx) 例:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字
4、(?<!xxx) 例:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字

 

在我上面所书写的正则表达式中,就用到了零宽断言 :?<=> 和 ?=<
尝试再次修改,如下:

let preg = new RegExp("(<\/?[\\w]+[^>]*>)(.[^<]*)?", 'g');


然后再在业务逻辑中处理即可。

改完后再次运行程序,就正常了。

 

标签:浏览器,断言,兼容问题,正则表达式,正则,safari,零宽
From: https://www.cnblogs.com/tommymarc/p/18019580

相关文章

  • 跨浏览器兼容性和调试技巧
    一、简介    不同的浏览器再解释和渲染网页代码时存在差异,可能导致网页在不同的浏览器上呈现出不同的效果,或者在某些浏览器上根本无法正常显示。所以需要进行浏览器兼容性调试。二、溯源   跨浏览器兼容性的定义:指网页在不同浏览器中能够正确显示并保持一致的能力......
  • Streamlit输出可下载xlsx文件到浏览器
    Streamlit以及业界给出的示例大多为针对csv文件的,但在实践中,数据经过处理后以xlsx文件输出的需求也不少。xlsx文件更接地气,更接近最终用户的需求。openpyxl是我最喜爱的xlsx文件处理工具,速度快功能强大,在使用Streamlit自作网站的时候自然优先选用。base64可理解为一种加密工具,将......
  • Apache DolphinScheduler中ZooKeeperCDH不兼容问题的解决方案
    背景看到ApacheDolphinScheduler社区群有很多用户反馈和讨论这块问题,针对不兼容的问题,不仅需要自己重新编译各一个新包,而且因为默认是使用zk-3.8的配置,所以会出现不兼容问题。使用zk-3.4配置即可适配3.4.x解决办法(一)切换到项目源码的根路径中执行mvncleanpackage-T1C-Pr......
  • Win10用资源管理器打开ftp站点跳转IE浏览器解决方法
    WindowsRegistryEditorVersion5.00[HKEY_CLASSES_ROOT\ftp]@="URL:FileTransferProtocol""EditFlags"=dword:00000002"ShellFolder"="{63da6ec0-2e98-11cf-8d82-444553540000}""SourceFilter"="{......
  • Windows和浏览器的命令与快捷键
    目录一、运行常用命令二、cmd常用命令(cmd的命令是运行的命令的超集)三、Windows快捷键1、Win键2、Ctrl键3、Alt键4、F键四、浏览器快捷键五、关闭Windows防火墙、安全中心和自动更新一、运行常用命令1.基本命令cmd打开命令提示符(cmd命令行控制台)control......
  • 浏览器事件循环
    根据网络课程记录的一些笔记,受益匪浅单线程是异步产生的原因事件循环是异步的实现方式浏览器运行会启动:浏览器进程网络进程渲染进程(一个标签页是一个渲染进程)某进程崩溃后,互不影响渲染进程渲染进程启动后,会开启一个渲染主线程,主线程负责执行html,css,js代码默认情况下,浏览......
  • js 基于能力检测进行浏览器分析
    虽然可能有人觉得能力检测类似于黑科技,但恰当地使用能力检测可以精准地分析运行代码的浏览器。使用能力检测而非用户代理检测的优点在于,伪造用户代理字符串很简单,而伪造能够欺骗能力检测的浏览器特性却很难。检测特性可以按照能力将浏览器归类。如果你的应用程序需要使用特定的浏......
  • js 浏览器元数据
    navigator对象暴露出一些API,可以提供浏览器和操作系统的状态信息。GeolocationAPInavigator.geolocation属性暴露了GeolocationAPI,可以让浏览器脚本感知当前设备的地理位置。这个API只在安全执行环境(通过HTTPS获取的脚本)中可用。这个API可以查询宿主系统并尽可能精确......
  • js 浏览器分析
    想要知道自己代码运行在什么浏览器上,大部分开发者会分析window.navigator.userAgent返回的字符串值。所有浏览器都会提供这个值,如果相信这些返回值并基于给定的一组浏览器检测这个字符串,最终会得到关于浏览器和操作系统的比较精确的结果。相比于能力检测,用户代理检测还是有一定......
  • 定制你的清爽Mac版Edge浏览器
    浏览器每次打开都有个烦人的提示要获取将来的microsoftedge更新,需要macos10.15或更高版本,找了很久也没有解决办法,有windows端的解决方案,有禁止更新的解决方案,就是没有Mac上如何避免这个告警的方案,于是走上Edge定制化之旅。省流直接下载下面的com.microsoft.Edge.......