0

我正在研究 gradle 脚本来遍历大型 css 文件并删除图像的 URL。至今:

def temp = ".post-format background:url(image/goes/here.jpg); {background:  .post-format {background: url(../img/post //formats.png);display:;display:.woocommerce-info:before {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAFCAYAAABvsz2cAAAAG0lEQVQIHWP8DwQMQMACxIwwBliECcQDATgDAMHrBQqJ6tMZAAAAAElFTkSuQmCC)center no-repeat #18919c    }"
def list = temp.findAll(/background:[\s]?url\([^\)]*\)/){ match ->
   match
}

这可行,但它也需要我们不需要的“数据:图像”文件 url。所以,这里的 temp 变量包含两个 - 好的 'image/goes/here.jpg' url 和一个我们不需要的 'data:image/png[..]'。我们将如何更新正则表达式以使其工作?如果您也可以分享您对正确正则表达式的理性支持,以帮助我们更好地学习正则表达式,我将不胜感激。十分感谢

4

2 回答 2

1

您可以使用负前瞻机制来完成您想要的。紧跟在您插入的转义左括号之后,(?!data:image)这意味着您此时不能匹配该文本。所以你的正则表达式变成:

/background:[\s]?url\((?!data:image)[^\)]*\)/

您可以看到这个rubular中说明的方法。另请参阅如何使用正则表达式找到除某些短语之外的所有内容?

于 2013-09-15T23:34:09.250 回答
0

您没有指定您使用的语言,但如果您想要的 URL 始终是第一个,请不要进行全局匹配(这就是findAll所做的,无论是哪种语言)。最有可能的是,将结果更改temp.findAlltemp.match标量字符串变量并将其分配给它。但请告诉我们是哪种语言。

于 2013-09-15T23:37:08.253 回答