如何在JavaScript中解决此正则表达式匹配/替换?

时间:2014-05-28 17:47:37

标签: 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上找到无数的东西,但似乎无法为此找到解决方案。

1 个答案:

答案 0 :(得分:2)

让我们假设你要用`config.js&#39;排除这一行。这就是你能做的:

搜索:

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

替换:

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

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

您的确切搜索和替换条件可能有所不同,但我确定您可以对其进行调整。

它是如何运作的?

  1. <script src="common查找以common
  2. 开头的脚本
  3. (?![\w/]+config\.js)否定前瞻声明紧接着的内容不是一些单词字符和斜杠后跟config.js