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

标签 javascript regex

我正在尝试从 JavaScript 文件中提取代码注释 block 。我正在制作一个轻型代码文档。

一个例子是:

/** @Method: setSize
 * @Description: setSize DESCRIPTION
 * @param: setSize PARAMETER
 */

我需要像这样提取评论设置,最好是放入一个数组中。

我已经走到这一步了,但意识到它可能无法处理换行标签等:

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

(好吧,这看起来很简单,但我正在绕圈子试图让它发挥作用。)

最佳答案

根据您希望继续使用提取的文档 block 执行的操作,可以想到多种方法。如果您只需要文档 block 而不需要进一步的引用,那么 String.match() 可能就足够了。否则你可能需要 block 的索引。

正如其他人已经指出的那样,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])
    );
}

关于javascript - 如何使用正则表达式查找多行 JavaScript 注释 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9262695/

相关文章:

JavaScript 函数未正确定义

javascript - Sencha ExtJS 4 链接组合框问题

javascript - 附加时编辑结果?

sql - 如何在Google bigquery中替换1-127范围以外的ASCII字符?

javascript - React-Native: Release模式下的 JavaScript 正则表达式异常(无效组)

具有 IDE 补全功能的 Javascript 伪枚举

javascript - Flex Ajax Bridge,或任何其他使用 ColdFusion 的推送方法?

mysql - 在 MYSQL 中使用 REGEXP 替换子字符串

python - Pandas :从字符串中去除数字和括号

regex - 跨多列的条件总和