iOS&Safari不兼容正则表达式的断言匹配及解决办法

您所在的位置:网站首页 苹果手机报错2022 iOS&Safari不兼容正则表达式的断言匹配及解决办法

iOS&Safari不兼容正则表达式的断言匹配及解决办法

2024-07-09 08:38| 来源: 网络整理| 查看: 265

前言:PC端谷歌、安卓手机正常运行;Safari、iPhone报错:SyntaxError: Invalid regular expression: invalid group specifier name

介绍:

正则表达式零宽断言一共四种:

在这里插入图片描述

通俗理解:

(?=pattern):后面是什么(?!pattern):后面不是什么(? 题型:

参数:content-string类型 方法逻辑: content长这样:“return ‘1’ === getAnswerById(‘b23ac55e-9265-45a6-ba1b-e18ba7732813’) && ‘2’ === getAnswerById(‘ec35748b-16fa-4d4a-96a1-118cf2910d11’)”,里面会有若干个getAnswerById(xxx)这样的方法。把字符串里的所有getAnswerById(xxx)的xxx抠出来,放在一个数组里返回 返回:抠出来的xxx数组 零宽断言:

interface findStringResult { idArr: string[] } function findString(content: string, methodName: string): findStringResult { const regexId: RegExp = new RegExp("(? { return idsArr.includes(item) ? false : idsArr.push(item) }); return idsArr; } const str:string = "return '1' === getAnswerById('b23ac55e-9265-45a6-ba1b-e18ba7732813') && '2' === getAnswerById('ec35748b-16fa-4d4a-96a1-118cf2910d11')" console.log(getIdsFromString(str)); // ['b23ac55e-9265-45a6-ba1b-e18ba7732813','ec35748b-16fa-4d4a-96a1-118cf2910d11']

兼容方案:

interface findStringResult { idArr: string[] } function findString(content: string, methodName: string): findStringResult { const regexId: RegExp = new RegExp("(" + methodName + "\\((\\'|\\\").*?(\\'|\\\")\\))", 'g') let idArr: string[] = content.match(regexId) || [] if (idArr.length) { // 需要判断方法里面的是单引号还是双引号 let quotes: string = -1 === idArr[0].indexOf("'") ? '"' : "'"; idArr = idArr.map(idItem => { return idItem.split(quotes)[1]; }) } return { idArr: idArr }; } function getIdsFromString(content: string): string[] { let idsArr: string[] = []; let targetObj: { idArr: string[] } = findString(content, 'getAnswerById'); targetObj.idArr.forEach(item => { return idsArr.includes(item) ? false : idsArr.push(item) }); return idsArr; } const str:string = "return '1' === getAnswerById('b23ac55e-9265-45a6-ba1b-e18ba7732813') && '2' === getAnswerById('ec35748b-16fa-4d4a-96a1-118cf2910d11')" console.log(getIdsFromString(str)); // ['b23ac55e-9265-45a6-ba1b-e18ba7732813','ec35748b-16fa-4d4a-96a1-118cf2910d11']

拓展:双斜杠解读,两步走:

\. 与 \\. 的区别 \. 第一步:被编译器解释为. 第二步:被正则表达式解释为匹配除换行符(\n、\r)之外的任何单个字符。 \\. 第一步:被编译器解释为\. 第二步:被正则表达式解释为.

demo是一个较复杂的方法,我拆分出来的,将就点看吧😂



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3