Suppose I have a HTML comment like this:
<!--hello world-->
We can get the get the comment with this regex:
var expression = /<!--(.*)-->/g
Working example:
var expression = /<!--(.*)-->/g;
console.log(document.querySelector("div").innerHTML.match(expression)[0]);
<div>
<!--hello world-->
</div>
But if the comment is multi-line, like this:
<!--hello
world-->
Then the regex doesn't work.
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>
How can I select the multi-line HTML comment?
CodePudding user response:
You just need a newline symbol along with any char. like this -
/<!--(.*\n.*)-->/gm;
CodePudding user response:
Use pattern [\s\S]*
instead of .*
to catch all chars, including whitespace. Alternatively, use the m
flag if you want the .*
match also newlines.
Use non-greedy pattern [\s\S]*?
if you expect more than one <!--...-->
pattern.
Working test case:
var expression = /<!--[\s\S]*?-->/g;
console.log(document.querySelector("div").innerHTML.match(expression));
<div>
<!--hello world 1-->
<!--hello
world 2-->
</div>
Output:
[
"<!--hello world 1-->",
"<!--hello\n world 2-->"
]