我有以下输入:
<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 (查看底部的替换部分)
您的确切搜索和替换标准可能有所不同,但我相信您能够对其进行调整。
它是如何工作的?
-
<script src="common
查找以 common 开头的脚本 (?![\w/]+config\.js)
负向先行断言紧随其后的不是config.js
后面的一些单词字符和斜杠。
关于javascript - 如何解决 JavaScript 中的正则表达式匹配/替换问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918504/