如何解决Node.js / Gulp中的多行正则表达式未捕获
我正在尝试创建一个正则表达式来匹配以下内容:
<!--
I'm a comment.
Here's another line.
-->
我不希望它与类似的评论匹配
<!--remove
Here's some content.
remove-->
或者:
<!-- TOC -->
- [Click here](https://example.com)
<!-- /TOC -->
我尝试过此正则表达式:
\<!--[^remove][^]*?-->$\gm
和我已经尝试过\<!--[^remove][\s\S]*?-->$\gm
,但它们没有起作用。我不确定还有什么尝试。
我在gulp任务中使用此命令将这些注释替换为空字符串。有什么建议吗?
解决方法
根据对问题的理解,我建议使用/^\s*<!--\s*$[^]*^\s*-->\s*$/gm
正则表达式。说明:
-
/gm
... g =全局(替换所有匹配项),m =多行,将^
和$
视为行的开始/结束(不仅是输入) -
^
...行的开头(在多行模式下,“通常”仅是输入的开头) -
$
...行尾(请参见上文) -
\s
...空格 -
\s*
...零个或多个空格 -
^\s*<!--\s*$
...<!--
只是行上的非空格文本(之前或之后可以有一些空格,但没有文本) -
[^]*
...零个或多个任何字符(包括换行符) -
^\s*-->\s*$
...类似于<!--
示例:
var str = `
Lorem ipsum
<!--
I'm a comment.
Here's another line.
-->
Lorem ipsum
<!--remove
Here's some content.
remove-->
Lorem ipsum
<!-- TOC -->
- [Click here](https://example.com)
<!-- /TOC -->
Lorem ipsum
`
console.log(str.replace(/^\s*<!--\s*$[^]*^\s*-->\s*$/gm,""))
/*
Lorem ipsum
Lorem ipsum
<!--remove
Here's some content.
remove-->
Lorem ipsum
<!-- TOC -->
- [Click here](https://example.com)
<!-- /TOC -->
Lorem ipsum
*/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。