You need to enable JavaScript to run this app. 使用带lookarounds环视的条件正则匹配key-value中source字段取值
优惠活动
大模型
产品
解决方案
定价
更多

使用带lookarounds环视的条件正则匹配key-value中source字段取值

正则解决方案

直接使用如下正则即可覆盖你提到的三种场景,且自动排除值两侧的双引号,值的内容会落在第1捕获组或第2捕获组,合并两个分组的结果即可拿到最终的value:

\bsource(?:::|=)(?:"([^"]+)"|([^\s]+))

正则逻辑拆解

  • \bsource:匹配完整的source单词边界,避免被其他包含source的单词命中
  • (?:::|=):匹配::或者=两种分隔符,非捕获组不占用结果分组
  • 后续分支逻辑:
    • 分支1 "([^"]+)":匹配双引号包裹的内容,[^"]+匹配所有非双引号的字符(包含空格、你提到的特殊符号),捕获组1直接拿到引号内部的内容,自动排除外层双引号
    • 分支2 ([^\s]+):匹配无引号的内容,[^\s]+匹配所有非空白字符,刚好对应无空格的取值场景,捕获组2拿到最终值

匹配测试结果

针对你提供的三个样本,匹配结果如下:

  • 样本1source="source name with quotes - special characters also":捕获组1拿到source name with quotes - special characters also
  • 样本2source=source_name_without_quotes_with_special-characters*:捕获组2拿到source_name_without_quotes_with_special-characters*
  • 样本3source="source_name_with_quotes_no_spaces-*":捕获组1拿到source_name_with_quotes_no_spaces-*

使用说明

实际代码调用时,判断如果捕获组1有值就取组1,否则取组2即可,不需要额外做引号去除的处理。如果你的正则引擎支持命名捕获组,可以优化为如下写法,直接取value分组即可:

\bsource(?:::|=)(?:"(?<value>[^"]+)"|(?<value>[^\s]+))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 09:06:04