JavaScript Regex选择多行html注释



假设我有这样的HTML注释:

<!--hello world-->

我们可以用这个正则表达式获得注释:

var expression = /<!--(.*)-->/g

工作示例:

var expression = /<!--(.*)-->/g;
console.log(document.querySelector("div").innerHTML.match(expression)[0]);
<div>
<!--hello world-->
</div>

但如果评论是多行的,比如:

<!--hello
world-->

那么正则表达式就不起作用了。

var expression = /<!--(.*)-->/g;
console.log(document.querySelector("div").innerHTML.match(expression)[0]); // Will throw an error because it could not find any matches
<div>
<!--hello
world-->
</div>

如何选择多行HTML注释?

使用模式[sS]*而不是.*来捕获所有字符,包括空白字符。或者,如果希望.*也与换行符匹配,请使用m标志。

如果希望使用多个<!--...-->模式,请使用非贪婪模式[sS]*?

工作测试用例:

var expression = /<!--[sS]*?-->/g;
console.log(document.querySelector("div").innerHTML.match(expression));
<div>
<!--hello world 1-->
<!--hello
world 2-->
</div>

输出:

[
"<!--hello world 1-->",
"<!--hellon  world 2-->"
]

您只需要一个换行符和任何字符。像这样-

/<!--(.*n.*)-->/gm;

最新更新