假设我有这样的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;