繁体   English   中英

如何使用正则表达式查找多行JavaScript注释块?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM