【问题标题】:JS Regex replace everything between and including HTML commentsJS Regex 替换 HTML 注释之间的所有内容,包括 HTML 注释
【发布时间】:2015-06-19 00:27:26
【问题描述】:

我正在尝试使用 grunt-string-replace 替换 2 个 HTML cmets 之间的文件内容。我想出的东西在单行上运行良好,但在我的一生中,我无法让它与多行匹配。

<!-- START COMMENT -->This matches<!-- END COMMENT -->

<!-- START COMMENT -->
this
doesn't
match
<!-- END COMMENT -->

我目前的正则表达式是

/<!-- START COMMENT -->[\s\S]*?<!-- END COMMENT -->/g

我知道用 [\s\S]*? 替换 .*?(适用于单行)将允许匹配多行,但我似乎无法让它工作。

有人有什么想法吗?

更新: 正如下面的评论者所提到的,我的正则表达式很好,这就是我用 grunt 实现它的方式

//This didn't work
.....
options:{
    replacements: [
        {
            pattern: "/<!-- START COMMENT -->[\s\S]*?<!-- END COMMENT -->/g",
            replacement: '<script src="'+minJSDestination+'"></script>'
        }
    ]
}
.....


//This does work
.....
options:{
    replacements: [
        {
            pattern: /<!-- START COMMENT -->([\s\S]*?)<!-- END COMMENT -->/ig,
            replacement: '<script src="'+minJSDestination+'"></script>'
        }
    ]
}
.....

【问题讨论】:

  • 您是否尝试使用“m”修饰符? (用你的“g”一个。)
  • regex101.com/r/tM0oB5/1 似乎工作正常
  • @Fraser 您的代码有效。您能否显示您实际使用此正则表达式的代码?
  • 这是我测试的地方:goo.gl/zkb5Ur 我会用我的解决方案更新帖子
  • 感谢@vihan1086 的帮助,我已经更新了我的解决方案

标签: javascript regex gruntjs grunt-string-replace


【解决方案1】:

在这一行:

pattern: "/<!-- START COMMENT -->[\s\S]*?<!-- END COMMENT -->/g",

您在 RegEx 周围有引号。删除它们,它应该可以正常工作:

pattern: /<!-- START COMMENT -->[\s\S]*?<!-- END COMMENT -->/g,

【讨论】:

  • 感谢您重新指出我在编辑中已经指出的内容,您从中获得了代码示例 :)
猜你喜欢
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 1970-01-01
  • 2014-01-26
  • 2014-08-14
  • 2015-08-07
  • 2014-11-12
相关资源
最近更新 更多