iOS&Safari不兼容正则表达式的断言匹配及解决办法 |
您所在的位置:网站首页 › 苹果手机报错2022 › iOS&Safari不兼容正则表达式的断言匹配及解决办法 |
前言: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 |