使用JavaScript正则表达式查找不在引号内的注释

时间:2019-04-03 12:54:43

标签: javascript regex

我想在SQL代码中找到所有注释,例如:

  

选择1-备注以删除

一个简单的正则表达式将是:

  

/--.+/ g

但是如果在引号内,则不会,例如:

  

选择1,“-不删除代码”

     

选择1,'hamm-请勿删除代码'

     

选择'hamm-请勿删除代码',1

1 个答案:

答案 0 :(得分:2)

您可能会匹配您不想找到的内容,并在一个小组中捕获您想要找到的内容

'[^']*--[^']*'|(--.+)

这将匹配

  • [^']*--[^']*'不匹配' 0次以上,然后-不匹配'0+次
  • |
  • (--.+)捕获组1中的匹配内容-以及字符串的其余部分

Regex demo

[
  "select 1 --remark to remove",
  "select 1, '--do not remove code'",
  "select 1, 'hamm --do not remove code'",
  "select 'hamm --do not remove code',1",
].forEach(s => {
  let res = s.match(/'[^']*--[^']*'|(--.+)/);
  if (undefined !== res[1]) {
    console.log(res[1]);
  }
});