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

求助:使用正则表达式提取含内部等号的参数-值组

参数-值对提取的正则解决方案

原正则失效的核心原因:仅通过负向预查判断后续是否为, 参数=的分隔模式,无法处理值内部包含括号、引号、等号的嵌套场景,会提前终止值的匹配。

修正后的正则表达式

/(?<parameter>[a-z_]+)\s*=\s*(?<value>(?:(?:\[((?:[^\[\]]|(?1))*)\]|\{((?:[^\{\}]|(?2))*)\}|(\((?:[^\(\)]|(?3))*\))|[^,\s=])+))(?:,\s*|$)/g

正则逻辑说明

  • (?<parameter>[a-z_]+):匹配由小写字母和下划线组成的参数名
  • \s*=\s*:匹配参数与值之间的等号,前后允许任意空白字符
  • (?<value>...):精准匹配参数值,处理三类嵌套结构及普通字符:
    • \[((?:[^\[\]]|(?1))*)\]:递归匹配数组([])内部内容,支持嵌套数组
    • \{((?:[^\{\}]|(?2))*)\}:递归匹配对象({})内部内容,支持嵌套对象
    • \((?:[^\(\)]|(?3))*\):递归匹配函数调用(())内部内容,支持嵌套括号
    • [^,\s=]:匹配非逗号、非空白、非等号的普通字符
  • (?:,\s*|$):匹配参数对之间的分隔逗号(带可选空白)或字符串结尾

测试示例

用JavaScript验证所有输入场景:

const testInputs = [
  "collection_a=['U1', 'U2'], collection_b=['U1', 'U2']",
  "collection=['U1', 'U2'], callback_macro=utils.user_email(user_id=$$)",
  "collection=['U1', 'U2'], callback_macro=utils.user_email(user_id=$$, config={'user': 'ADMIN'})",
  "collection=['U1','U2'], callback_macro=string.replace(value=$$, pattern=^(.*)$, replacement={'user': $1})"
];

const paramRegex = /(?<parameter>[a-z_]+)\s*=\s*(?<value>(?:(?:\[((?:[^\[\]]|(?1))*)\]|\{((?:[^\{\}]|(?2))*)\}|(\((?:[^\(\)]|(?3))*\))|[^,\s=])+))(?:,\s*|$)/g;

testInputs.forEach(input => {
  console.log(`输入:${input}`);
  let matchResult;
  while ((matchResult = paramRegex.exec(input)) !== null) {
    console.log(`Group Parameter = ${matchResult.groups.parameter},Group Value = ${matchResult.groups.value}`);
  }
  console.log('---');
});

运行后会输出符合要求的分组结果,完美适配所有测试场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:53:21