Chrome扩展选中文本拼接URL残留双引号无法移除问题求助
问题根源
你的代码存在两个核心错误导致引号无法正常移除:
- 操作顺序逻辑倒置:你先对
JSON.stringify()的结果执行了URI编码,此时原生双引号已经被转为URI编码格式%22,你的正则匹配的"是HTML实体格式的引号,完全无法匹配到编码后的引号内容,因此替换规则完全不生效。 - 冗余操作引入多余引号:
info.selectionText本身就是字符串类型,完全不需要调用JSON.stringify()处理,这个方法会主动给字符串首尾包裹双引号,属于不必要的额外操作。
最优修复方案
直接删除冗余的JSON.stringify()调用即可,不需要额外的引号替换逻辑,修改后代码如下:
// 直接对原生选中内容编码即可,没有多余引号需要处理 var EncodedSelectedText = encodeURIComponent(info.selectionText); if (RITMRegExPattern.test(info.selectionText)) { chrome.tabs.create({ url: 'https://redacted-site-name.com/sc_req_item_list.do?sysparm_query=numberLIKE'+EncodedSelectedText }); }else if . . .
兼容保留JSON.stringify的修复方案
如果你有特殊需求必须保留JSON.stringify()调用,可以调整操作顺序或修改正则匹配规则,二选一即可:
- 先替换引号再执行URI编码
var OriginalText = JSON.stringify(info.selectionText).replace(/^"|"$/g, ''); var EncodedSelectedText = encodeURIComponent(OriginalText);
- 编码后匹配URI格式的引号进行替换
var EncodedSelectedText = encodeURIComponent(JSON.stringify(info.selectionText)); var NoQuotes = EncodedSelectedText.replace(/^%22|%22$/g, '');
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

