【问题标题】:Match until comment character not inside quotes with escape characters匹配直到注释字符不在带转义字符的引号内
【发布时间】:2018-08-15 14:17:05
【问题描述】:

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

例如,如果我有这条线

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

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

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

  • \\: 转义的反斜杠
  • \":转义引用

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

opt_name = "opt value" # comment

我确实尝试过 regex101,但我对这种复杂性的 regex 不太熟悉,而且不知所措。

【问题讨论】:

  • 编辑您的问题并提供涵盖所有正面和负面案例的样本数据。我们无法猜测您定义评论与真实文本的逻辑是什么。
  • 很遗憾,您的编辑没有多大帮助。我们如何判断这些行中哪一行在末尾有注释:test # testtest # test comment
  • 你的意思是^opt[^"]+".*?(?=" #|$)" 吗?试试here
  • 我可以做到这一点。我更喜欢更通用的解决方案。除了选项线之外,我实际上还有另一种线,但我想这样就可以了。有点。我想要并且我已经解释过我想要匹配任何内容,直到注释字符不在引号内。如果你不能提供,那么如果你一直用不回答的方式刺激我,我只会把你变成南瓜。
  • 你在那里回复我吗?

标签: regex parsing


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-01-10
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2023-03-27
    • 2011-09-25
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多