用重复的模式替换一行正则表达式

Regex replacement one a single line with a repetitive pattern

本文关键字:一行 正则表达式 替换 模式      更新时间:2023-09-26

假设我有以下单行代码:

<script src="common/scripts/vendor.0.js"></script><script src="common/scripts/all.0.js"></script><script src="common/scripts/environment.0.js"></script><script src="vendor/angular-mocks/angular-mocks.js"></script><script src="common/scripts/another.0.js">

我基本上想要匹配并替换下面的字符串:

<script src="vendor/angular-mocks/angular-mocks.js"></script>

要匹配的关键模式是指向angular-mocks.js文件的<script>标记,路径可以在将来更改。但更换必须为整个<script>标签。

此外,所有文件中的0实际上将包含Jenkins的构建号,以防您了解相关信息。

谁能帮我用正则表达式做这个?

<script[^>]+?angular-mocks'.js"><'/script>

与Qeole的答案非常相似,但与实现无关;您可能需要额外的转义。如果你正在使用JS、PCRE或PY,这里有一个regex101的链接。

编辑

如果不能保证src是标签内的最后一个属性,则使用:

<script[^>]+?angular-mocks'.js"[^>]*><'/script>

regex101

对于sed命令,您可以使用:

sed 's=<script [^>]*angular-mocks.js"></script>=='
    <<< '<script src="common/scripts/vendor.0.js"></script><script src="common/scripts/all.0.js"></script><script src="common/scripts/environment.0.js"></script><script src="vendor/angular-mocks/angular-mocks.js"></script><script src="common/scripts/another.0.js">'

(匹配<script,然后匹配不包含>的字符串,然后匹配angular-mocks.js></script>并删除整个内容)