Javascript 提取评论 RegExp
Posted
技术标签:
【中文标题】Javascript 提取评论 RegExp【英文标题】:Javascript Extract Comments 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
*/
规则就是注释块以/**
开头,以*/
结尾。在评论中,所有字符都是允许的。
谁能帮帮我?谢谢!
【问题讨论】:
【参考方案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。您有解决方案来阻止这种请求吗?以上是关于Javascript 提取评论 RegExp的主要内容,如果未能解决你的问题,请参考以下文章