【问题标题】:Javascript Extract Comments RegExpJavascript 提取评论 RegExp
【发布时间】:2012-04-23 07:59:32
【问题描述】:

我有一个这样的 Javascript 文件

/**
 * My Comment Line1
 * My Comment Line2
 */
var a = 123;
/**
 * My Comment Line3
 * My Comment Line4
 */
var b = 456;

我正在使用node.js读取文件,并想在这个文件中提取cmets。

我使用这个正则表达式

/\/\*\*((?:\r|\n|.)*)\*\//

但是这会提取

/**
 * My Comment Line1
 * My Comment Line2
 */
var a = 123;
/**
 * My Comment Line3
 * My Comment Line4
 */

我的程序有一个循环来逐个提取匹配的块。所以我想要一个正则表达式来提取

第一个循环

/**
 * My Comment Line1
 * My Comment Line2
 */

第二个循环

/**
 * My Comment Line3
 * My Comment Line4
 */

规则就是注释块以/** 开头,以*/ 结尾。在评论中,所有字符都是允许的。

谁能帮帮我?谢谢!

【问题讨论】:

    标签: javascript regex comments extract


    【解决方案1】:

    试试这个:(任何类型的 cmets 都可以)- 现场演示:http://regexr.com?30jrh

    (/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|(//.*)
    

    看看:

    【讨论】:

    • 我也喜欢这个答案!这是一个更通用的答案。谢谢!
    • @AlexYeung 不客气,我的朋友! :-) 这是我用于多行注释匹配的最成熟的正则表达式之一。它捕获了许多“隐藏”的情况(例如评论中的*/,这仍然是评论,对吧?)+它还获得单行cmets(//)。
    • var s = "This is a /*string*/" 怎么样?你的正则表达式会得到一个误报。我认为如果不实际解析大部分脚本,就不可能正确覆盖所有边缘情况。
    • 谢谢!这也是我发现的!
    • 对于任何因语法错误而苦苦挣扎的人var commentPattern = new RegExp('(\\/\\*([^*]|[\\r\\n]|(\\*+([^*\/]|[\\r\\n])))*\\*+\/)|(\/\/.*)', 'g');
    【解决方案2】:

    这是一个正则表达式:

    /\/\*\*(.|\n)+?\*\//
    

    And here's a demo.

    【讨论】:

    • @Dr.Kameleon:请检查更新,包括演示。 (你现在可以取消你的反对票了......)
    • @Dr.Kameleon:我真的不在乎“RegExr”怎么说,这是 JavaScript 和 jsFiddle,你知道,证明它确实有效。尽管如此,启用“dotall”和“global”标志让它在那里工作。
    • 有效!但为什么?关键是?。我不明白... :(
    • @AlexYeung:量词后的? 使其不贪婪,即它会尝试匹配尽可能少的字符。
    【解决方案3】:

    其他答案对我来说不太适用。下面是在 Node.js 中解析 Javascript 的方法。

    /(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(\/\/.*)/g
    

    【讨论】:

      【解决方案4】:
      /(\/\*).*?(\*\/)|(\/\/).*?(\n|\$)/s
      

      匹配开始和结束多行标签以及介于两者之间的任何内容

      (\/\*).*?(\*\/)
      

      或者匹配一个以换行符或行尾结束的单行打开注释

      (\/\/).*?(\n|\$)
      

      【讨论】:

      • 单行匹配落在带有诸如“httm://www....”之类的 URL 的行上@Mwayi。您有解决方案来阻止这种请求吗?
      猜你喜欢
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 2014-09-10
      相关资源
      最近更新 更多