我正在使用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
}
这有效,但它也需要我们不需要的'data:image'文件网址。所以,这里的temp变量包含两个 - 好的'image / goes / here.jpg'url以及我们不需要的'data:image / png [..]'。我们如何更新正则表达式以使其工作?如果你也可以分享正确的正则表达式的理性背后,以帮助我们更好地学习正则表达式,我将非常感激。非常感谢你
答案 0 :(得分:1)
您可以使用negative look ahead机制来完成您想要的任务。在转义左括号后,您立即插入(?!data:image)
,这意味着您必须不匹配该文本。所以你的正则表达式变成了:
/background:[\s]?url\((?!data:image)[^\)]*\)/
您可以看到此rubular中说明的方法。另请参阅How can I find everything BUT certain phrases with a regular expression?
答案 1 :(得分:0)
您没有指定您正在使用的语言,但如果您想要的网址始终是第一个,则不要进行全局匹配(这是 findAll 所做的,不管是什么是的语言)。最有可能的是,将temp.findAll
更改为temp.match
并将结果分配给标量字符串变量即可。但请告诉我们哪种语言。