我试图使用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
标记。
答案 0 :(得分:4)
请注意([^\*\/]){1,}
仅匹配*
或/
以外的一个或多个个别字符,而不是2个字符的序列。
您可以使用惰性匹配(*?
量词匹配尽可能少的字符来确保找到匹配项)[^]
或[\s\S]
(与任何字符匹配的类,包括换行符) :
/\/\*@comment[\s\S]*?\*\//g
请参阅regex demo
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;
我更喜欢[\s\S]
到[^]
,因为后者仅受JavaScript正则表达式引擎的支持。