如何编写匹配key=(value, value)格式的Regex实现字符串转数组/对象
问题原因分析
你使用的正则中.*为贪婪匹配模式,会尽可能多的匹配字符,直到命中整个字符串最后一个=的位置,因此会把前半段所有内容都归入分组1,仅保留最后一个等号后的内容到分组2,不符合多键值对拆分的需求。
正确正则及使用方法
正则表达式
/(\w+)\s*=\s*(\([^)]+\))/g
规则说明
(\w+):分组1匹配键名,支持字母、数字、下划线组成的合法变量名\s*=\s*:匹配等号,兼容等号前后的任意空白字符(\([^)]+\)):分组2匹配括号包裹的数值对,[^)]+限定匹配范围到右括号为止,不会跨键值对匹配- 末尾的
g为全局匹配标识,用于匹配字符串中所有符合规则的键值对
代码示例(JavaScript)
// 输入字符串 const inputStr = '{xRate=(250.0, 260.0), yValue=(1.51, 1.54)}'; // 正则实例 const matchRegex = /(\w+)\s*=\s*(\([^)]+\))/g; // 转换为目标数组格式 const result = Array.from(inputStr.matchAll(matchRegex), matchItem => [matchItem[1], matchItem[2]]); console.log(result); // 输出:[['xRate', '(250.0, 260.0)'],['yValue', '(1.51, 1.54)']]
测试用例test=(23, 34), var=(true , false)执行后输出为[['test', '(23, 34)'], ['var', '(true , false)']],符合预期。
正则学习资源推荐
- 入门:《正则表达式必知必会》,内容精简,覆盖日常开发90%以上的常用正则场景,适合快速入门
- 进阶:《精通正则表达式》,深入讲解不同语言正则引擎的实现差异,以及回溯、环视等高级用法
- 练习:可以使用本地正则可视化工具,实时查看分组匹配结果,快速定位正则编写中的问题
内容的提问来源于stack exchange,提问作者CRafael22
相关产品推荐
相关产品推荐

