Chrome插件Tel Linker正则无法匹配含%20编码的tel URL问题求助
解决Tel Linker扩展正则匹配编码空格的问题
你的正则无法匹配%20编码空格的核心原因是:原规则只包含了普通空格(\s)、短横和点作为分隔符,没覆盖URL编码后的空格%20。以下是调整后的正则和说明:
修改后的正则
(?:[\s:]|\d+(?:-|\.)|^)\(?([\d]{3})\)?(?:[- .]|%20)?([\d]{3})(?:[- .]|%20)?([\d]{4})(?=<|\s|$)
关键调整点
- 将原规则中匹配分隔符的
[- \.]?替换为(?:[- .]|%20)?:(?:...)是非捕获组,用于整合多种分隔符选项但不额外生成捕获分组,保持原有三个号码分组(区号、中间三位、末尾四位)的结构不变;- 新增
%20选项,专门匹配URL编码后的空格,同时保留原有的短横、点和普通空格匹配能力;
测试验证
针对你给出的两个案例:
tel:(904)%20640-8301:会正确捕获904、640、8301三个部分;tel:(904)%20640%208301:同样能精准提取三组号码数字;
如果后续遇到其他编码格式的分隔符(比如%2D对应短横),可以用同样的方式把编码值加入到非捕获组的选项中即可。
内容的提问来源于stack exchange,提问作者Vitalie R.
相关产品推荐
相关产品推荐

