javascript - 如何解决 JavaScript 中的正则表达式匹配/替换问题?

标签 javascript regex gruntjs

我有以下输入:

<script src="common/scripts/vendor.0.js"></script>
<script src="common/scripts/all.0.js"></script>
<script src="common/scripts/config.js"></script>

我正在尝试编写一个 Grunt 任务来使用 JavaScript 正则表达式进行匹配/替换,如下所示:

{
    match: /<(script.*?src=)"(.*?)"(.*?)>/g,
    replacement: '<$1"//<%= config.cdn.preview[0] %>/$2"$3>'
}

我得到这个输出:

<script src="//cdn.domain.com/common/scripts/vendor.0.js"></script>
<script src="//cdn.domain.com/common/scripts/all.0.js"></script>
<script src="//cdn.domain.com/common/scripts/config.js"></script>

到目前为止一切顺利...唯一的事情是...我不想用 config.js 文件匹配/替换该行,只想用其他两个文件。我希望输出是这样的:

<script src="//cdn.domain.com/common/scripts/vendor.0.js"></script>
<script src="//cdn.domain.com/common/scripts/all.0.js"></script>
<script src="common/scripts/config.js"></script>

我已经尝试了无数在 SO 和 Google 上找到的东西,但似乎找不到解决方案。

最佳答案

假设您想排除包含 `config.js' 的行,您可以这样做:

搜索:

<script src="common(?![\w/]+config\.js)

替换:

<script src="//cdn.domain.common

参见demo (查看底部的替换部分)

您的确切搜索和替换标准可能有所不同,但我相信您能够对其进行调整。

它是如何工作的?

  1. <script src="common查找以 common 开头的脚本
  2. (?![\w/]+config\.js)负向先行断言紧随其后的不是 config.js 后面的一些单词字符和斜杠。

关于javascript - 如何解决 JavaScript 中的正则表达式匹配/替换问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918504/

相关文章:

javascript - grunt-include-source 多个配置

javascript - 如何删除aws s3存储桶中具有相同键的多个对象

regex - 具有此日志行的 Grok 模式

node.js - 为什么在文件名中包含哈希比将时间戳附加为查询参数更适合缓存?

regex - 在所有文件中查找并替换符合 Unix 搜索条件的单词

c# - 为什么静态 RegEx 比实例 RegEx 慢?

javascript - 如何构建 polymer 元素?

javascript - 在网页上水平对齐时钟

javascript - jQuery 可排序序列化无法识别动态添加的内容

javascript - 创建一个函数来接受二维数组并返回一个显示所有键的对象 :values