我有一个Regex作为/urls*((?!['("]?(?:data):)['"]?([^')")]*)['"]?([)]|$)/gi
我们使用它来解析样式标签以获得URL(例如backgroundImage)。对于等URL,它失败了
1]background-image: url(2f content2f dam2f dx2fus2f en2f error-pages2f 404-1440x612_edge2.jpg2fjcr%3acontent2frenditions2f cq5dam.tablet_1400.1400.595.jpg); background-position: 50% 50%;
应为=>url(2f content2f dam2f dx2fus2f en2f error-pages2f 404-1440x612_edge2.jpg2fjcr%3acontent2frenditions2f cq5dam.tablet_1400.1400.595.jpg)
2] 背景图像:url("https://www.investopedia.com/thmb/m3EwtlYfbUhlr9e34AofFj9wok8=/1300x0/filters:contrast(10):brightness(-10):no_upscale()/TopTerms-2bdc464d466944deb41fc07379407600.jpeg")
应为=>url("https://www.investopedia.com/thmb/m3EwtlYfbUhlr9e34AofFj9wok8=/1300x0/filters:contrast(10):brightness(-10):no_upscale()/TopTerms-2bdc464d466944deb41fc07379407600.jpeg")
它在contrast(10)处失败:因为它认为contraste(10)的右括号是URL的末尾。
3]background-image:url('https://cdn.comcast.com/-/media/Images/www_xfinity_com/TV/X1/09072021 Refresh/10X1HeroDesktop.png?rev=d04c61c0-3658-457d-8260-74ef6694c0ed&mw=1280&mh=600&hash=6A1C4FEC8499EE38864BA31D24B9E42220D8C7EB')" background-size: cover;
应为=>url('https://cdn.comcast.com/-/media/Images/www_xfinity_com/TV/X1/09072021 Refresh/10X1HeroDesktop.png?rev=d04c61c0-3658-457d-8260-74ef6694c0ed&mw=1280&mh=600&hash=6A1C4FEC8499EE38864BA31D24B9E42220D8C7EB')
4]style="position:absolute; background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=) repeat 0 0"
应为=>url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=)
您可以使用一个替换|
来获得不同的格式。
urls*((?:data:imageS+|(['"]).*?1|[^()]*))
在某些部分,模式匹配:
urls*(
匹配url,可选空白字符和(
(?:
交替非捕获组data:imageS+
匹配数据:图像和1个以上非空白字符|
或(['"]).*?1
从左引号到右引号匹配|
或[^()]*
匹配除括号外的任何字符的0+倍
)
关闭非捕获组)
匹配)
Regex演示