正则表达式以逗号分隔参数列表,但忽略引号中的逗号

问题描述

我需要解析一个字符串,它是一个逗号分隔的表单参数列表

key1=value1,key2=value2,key3=value3...

复杂的是值可以用引号括起来,以允许它们包含空格和逗号等。当然,引号括起来的逗号不应该算作分隔参数。 (在引号之外的不同地方也可以有空格,可能应该被忽略。)

我的想法是在逗号处拆分列表,然后在每个参数定义中,将键与等号处的值分开。所以要split参数,我需要找到有效的(不是引号);我认为正则表达式是简洁和直接的方式。

以下是一些示例字符串:

  • Include="All Violations",CheckType=MaxTrans
  • MetricName = PlacedInstances,PlacedOnly = 1
  • CheckType=Hold,Include="reg2reg,in2reg,in2out,reg2out"
  • CheckType=Setup,reg2out(原文如此)

是的,最后一个格式很差:值中缺少一个终止引号。

我发现 this answer 很有帮助(正则表达式:/,(?=(?:(?:[^"]*"){2})*[^"]*$)/),除了解析格式不佳的那个。在我的例子中,我在等号中有额外的信息,这将允许解析那个。

我试过这个:(/(?<==[^"]+),/,它适用于格式不佳的,但我的第一个例子失败了。我认为我需要的是一种方法来查找前面有等号但在它们和前面的第一个等号之间有零个或两个引号(不仅仅是单引号)的逗号。但是我如何在 Javascript Regex 中编写它?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)