匹配,直到注释字符不在引号内且带有转义字符

时间:2018-08-15 14:17:05

标签: regex parsing

我想使用javascript中的正则表达式来匹配注释字符#之前的所有内容。

例如,如果我有一行

opt = "include # \"everything\" # until # the # real # comment\\" # comment "not quotes (comment)"

我希望正则表达式匹配opt = "include # \"everything\" # until # the # real # comment\\"

请注意,我还要注意两个转义序列:

  • \\:转义的反斜杠
  • \":转义的报价

为清楚起见,我有左侧的“变量”,使用双引号的字符串(以及引号内的两个转义字符:\"\\)和使用#的内联注释。另外,赋值运算符=。也不必在每行中都添加逐行注释,因此opt = "test # test"应该匹配。只需考虑一下您曾经编辑过的任何配置文件即可……

opt_name = "opt value" # comment

我当然尝试过regex101,但是我对这种复杂性的regex不太满意,并且茫然。

1 个答案:

答案 0 :(得分:1)

您最好的选择是使用以下正则表达式,但过滤掉第一个捕获组为空的那些正则表达式:

((?<!(?<!\\)\\)".*?(?<!(?<!\\)\\)")|#.*