[英]How can I find multi-line JavaScript comment blocks using a regular expression?
我试图从JavaScript文件中提取代码注释块。 我正在制作一个轻型代码记录器。
一个例子是:
/** @Method: setSize
* @Description: setSize DESCRIPTION
* @param: setSize PARAMETER
*/
我需要将这样的注释设置拉出来,理想情况下是一个数组。
我已经得到了这个,但意识到它可能无法处理新的行标签等:
\/\*\*(.*?)\*\/
(好吧,这看起来很简单,但是我试图让它发挥作用。)
根据您要对提取的文档块继续执行的操作,可以想到多种方法。 如果您只需要docblock而无需进一步引用,String.match()就足够了。 否则,您可能需要块的索引。
正如其他人已经指出的那样,javascript的RegEx机器就是功能强大的东西。 如果你已经习惯了PCRE,这就像用双手绑在背后一样。 [\\s\\S]
(空格字符,非空格字符)相当于dotAll - 也可以捕获换行符。
这应该让你开始:
var string = 'var foo = "bar";'
+ '\n\n'
+ '/** @Method: setSize'
+ '\n * @Description: setSize DESCRIPTION'
+ '\n * @param: setSize PARAMETER'
+ '\n */'
+ '\n'
+ 'function setSize(setSize) { return true; }'
+ '\n\n'
+ '/** @Method: foo'
+ '\n * @Description: foo DESCRIPTION'
+ '\n * @param: bar PARAMETER'
+ '\n */'
+ '\n'
+ 'function foo(bar) { return true; }';
var docblock = /\/\*{2}([\s\S]+?)\*\//g,
trim = function(string){
return string.replace(/^\s+|\s+$/g, '');
},
split = function(string) {
return string.split(/[\r\n]\s*\*\s+/);
};
// extract all doc-blocks
console.log(string.match(docblock));
// extract all doc-blocks with access to character-index
var match;
while (match = docblock.exec(string)) {
console.log(
match.index + " characters from the beginning, found: ",
trim(match[1]),
split(match[1])
);
}
这应该抓住一个注释块\\/\\*\\*[^/]+\\/
。 我不认为Regexp是从这些块生成数组的最佳方法。 这个regexp基本上说:
找到/**
(用\\
符号转义星号和正斜杠)
然后找到任何不是/
然后找一个/
这是粗糙的,但通常应该工作。 这是一个实例http://regexr.com?300c6
一些魔法怎么样:)
comment.replace(/@(\w+)\s*\:\s*(\S+)\s+(\w+)/gim, function (match, tag, name, descr) {
console.log(arguments);
// Do sth. ...
});
我没有对此进行测试,所以对于正则表达式没有任何保证,只是为了指出你有可能做一些RegExp搜索John Resig方式8-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.