【问题标题】:Regular expression to remove JavaScript double slash (//) style comments删除 JavaScript 双斜杠 (//) 样式注释的正则表达式
【发布时间】:2009-10-14 22:10:34
【问题描述】:

我正在尝试通过 C# 中的正则表达式来删除 JavaScript cmets,但已经卡住了。我想删除任何出现的双斜杠 // 样式 cmets。

我当前的正则表达式是 (?<!:)//[^\r\n]*,它将捕获所有 cmets 并阻止匹配 http://。然而,消极的后视是懒惰的,当然在以下测试用例中让我回想起:

var XSLPath = "//" + Node;

所以我正在寻找一个正则表达式,它将执行后向查看以查看在匹配之前是否出现偶数个双引号 (")。我不确定这是否可能。或者有没有更好的方法来做到这一点?

【问题讨论】:

标签: c# .net regex


【解决方案1】:

(根据 cmets 更新)

看起来这很有效:

(?<=".*".*)//.*$|(?<!".*)//.*$

看来test cases in Regex Hero 表明它将以我认为应该(几乎)的方式匹配 cmets。

例如,它将完全忽略这一行:

var XSLPath = "//" + Node;

但它足够聪明,可以匹配此行末尾的注释:

var XSLPath = "//"; // stuff to remove

但是,知道如何处理评论前的 3 个或更多引号是不够聪明的。我不完全确定如何在不进行硬编码的情况下解决该问题。您需要一些方法来允许偶数个引号。

【讨论】:

  • 然而,这很容易通过(?&lt;![":])//.*(?!")$改变
  • 在这样的事情上失败:“text // more text”
  • @LFSR Consulting -- 做得很好,您的修改似乎解决了这个问题。希望你不介意,但我用你的修复更新了我的答案。
  • 乔尔,看来你需要一些方法来允许在斜线之前有偶数个引号,但不是奇数。嗯……
  • 我再次更新了我的正则表达式。这将匹配 cmets,即使它前面出现两个引号,但不是 1 个引号。
猜你喜欢
  • 2023-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多