在逗号分隔值的文本中捕获逗号

时间:2017-08-07 13:03:05

标签: javascript regex

我有一个由逗号分隔的值列表,如下所示:

  

bDestruction =真,bEmissionAlarme =假,bActionReinit =假,sNatureData =“苏尔   évènementprovenantd'ALIS ou SGP - Lignes BJ,IJ ou   GMO”,sCodeMsgExpliControle = “MSG-G00033_P_ALIM_ME”

我想捕获参数和值,所以我做了这个正则表达式:

(?:([^=]*))="?([^,]*)(?:"|,)?

但是因为它在大多数情况下都有效,所以他没有提供示例,因为sNatureData之后的文本包含逗号。因此正则表达式认为它是一对{parameter = value}的结束并抛出错误。

可以做些什么? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我建议您按照评论中给出的建议,而不要使用正则表达式。

但是,如果您确实需要使用正则表达式执行此操作,则以下操作应该可以解决问题:

(.*?)=("?)([^"]+?)\2(?:,|$)
  • (.*?)=捕获=符号左侧的键。它只捕获一个密钥,因为?使其匹配尽可能少的字符。
  • ("?)捕获值是否在引号中。
  • ([^"]+?)\2(?:,|$)
    • ([^"]+?)捕获超过1个不是"但尽可能少的字符。
    • \2(?:,|$)如果有引号并且它再次找到一个引号,或者在下一个逗号或字符串已完成时停止。

Test online