如何使用JavaScript正则表达式捕获CSS多行注释块

时间:2015-10-17 13:39:58

标签: javascript html css regex node.js

我试图使用JavaScript正则表达式捕获CSS多行注释块,但我不确定如何找到结束注释标记而不会在HTML示例中偶尔出现斜线,这是一种情况:

/*@comment

    @title: Buttons
    @name: block-name
    @category: Category name > Sub category
    @description: This is the description of the element
    @html:
        <div class="block-name"></div>

*/

我尝试使用此正则表达式,但我到达了结束div标签:

\/\*@comment([^\*\/]){1,}

所以我尝试添加结束注释标记,它就停止了工作:

\/\*@comment([^\*\/]){1,}\*\/

如何找到一个JavaScript正则表达式来捕获整个块?

请注意,我可以在每个文件中找到多个这样的块,因此我会在正则表达式中使用g标记。

1 个答案:

答案 0 :(得分:4)

请注意([^\*\/]){1,}仅匹配*/以外的一个或多个个别字符,而不是2个字符的序列。

您可以使用惰性匹配(*?量词匹配尽可能少的字符来确保找到匹配项)[^][\s\S](与任何字符匹配的类,包括换行符) :

/\/\*@comment[\s\S]*?\*\//g

请参阅regex demo

&#13;
&#13;
var re = /\/\*@comment[\s\S]*?\*\//g; 
var str = '/*@comment\n\n    @title: Buttons\n    @name: block-name\n    @category: Category name > Sub category\n    @description: This is the description of the element\n    @html:\n        <div class="block-name"></div>\n\n*/';
var m;
 
while ((m = re.exec(str)) !== null) {
    if (m.index === re.lastIndex) {
        re.lastIndex++;
    }
    console.log(m[0]);
}
&#13;
&#13;
&#13;

我更喜欢[\s\S][^],因为后者仅受JavaScript正则表达式引擎的支持。