Regex在少数URL上失败



我有一个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演示

最新更新