You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

匹配单双引号间内容的正则问题:无法捕获空引号内容

问题分析

你的正则之所以在空引号对放在文本开头时失效,核心问题出在中间捕获组的结构设计上:
原正则里的((?:.(?!(?<![\\])\1))*.?)存在两个缺陷:

  1. 顺序错误的前瞻检查:.(?!(?<![\\])\1)是先匹配单个字符,再检查该字符后是否不是目标引号(\1)。但你的引号包含多字符的HTML实体&quot;,当空引号对的第二个&quot;开头字符&出现时,引擎会先匹配这个&,再检查后续是否是&quot;——这时候前瞻条件触发失败,引擎会回溯并尝试扩展.*?来匹配更多字符,直接跳过了空引号对,直到找到下一个完整的&quot;。
  2. 多余的.?惰性匹配:这个.?会强制引擎至少尝试匹配0或1个字符,在空引号场景下,引擎会优先尝试匹配字符而非直接匹配空,进一步干扰了对空内容的识别。

当空引号对放在文本末尾时,引擎匹配到字符串结尾后无法继续扩展.*?,只能回溯到匹配空,这才刚好命中后面的结束引号,所以能正常匹配。

修正后的正则

把中间捕获组的结构调整为先做前瞻检查,再匹配字符,同时移除多余的.?,修改后的正则如下:

/((?<![\\])['&quot;])((?:(?!(?<![\\])\1).)*)\1/g

(注:添加g修饰符才能匹配所有符合条件的结果)

验证效果

针对输入文本val1=&quot;&quot;val2&gt;&quot;2022-11-16 10:19:20&quot;,该正则会正确捕获两个结果:

  1. &quot;&quot;对应的空内容(捕获组2为空)
  2. 2022-11-16 10:19:20对应的内容

针对末尾的空引号对场景,同样能正常匹配。

内容的提问来源于stack exchange,提问作者HRS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:25:13