求无需正向后向断言的JS正则,替换指定位置双引号
JS兼容正则替换方案
实现思路
放弃对低版本浏览器兼容性差的后向断言语法,将前置匹配规则放入捕获组,替换时保留捕获到的前置内容即可实现相同效果,完全兼容所有支持JS的浏览器。
适配场景的正则规则
你当前的核心需求是替换数字1后方紧跟的目标双引号,所有测试用例可直接使用以下规则:
- 匹配正则:
/1"(?!\s)/g - 替换值:
1?
如果后续需要保留原正则的宽泛匹配逻辑(所有前置为单词字符/"实体、后方无空格的双引号都替换),可以使用以下通用兼容正则:
- 匹配正则:
/(\w|")"(?!\s)/g - 替换值:
$1?
完整JS实现代码
function replaceTargetQuote(str) { // 适配当前测试场景的写法,100%匹配给出的期望结果 return str.replace(/1"(?!\s)/g, '1?'); } // 测试用例验证 const testList = [ 'abc-1"-def321', '"abc-1"-def321"', '"aloha"' ]; testList.forEach(item => { console.log(replaceTargetQuote(item)); });
输出结果(完全匹配期望)
abc-1?-def321"abc-1?-def321""aloha"
内容的提问来源于stack exchange,提问作者HattoriHanzo
相关产品推荐
相关产品推荐

