html - 寻找一个正则表达式来匹配背景图片url中的所有情况

标签 html regex

我正在尝试找到一个正则表达式,它能够处理 html 中的 3 种情况。

例如,

  1. 背景图片:url( https://www.aaa.com/xxx/picture.png );背景大小:100%...
  2. 背景图片:url("https://www.aaa.com/xxx/picture(1_2)_pic(23).png")
  3. 背景图片:url( https://www.aaa.com/xxx/picture )

在这 3 个案例中,我想提取 3 个网址:

  1. https://www.aaa.com/xxx/picture.png
  2. https://www.aaa.com/xxx/picture(1_2)_pic(23).png
  3. https://www.aaa.com/xxx/picture

我创建了一个正则表达式,它只能提取前两个。不幸的是,无法想象正则表达式能够在该正则表达式中获得第三种情况(不带扩展名的 URL 路径)。

到目前为止我想到了什么:

/background(?:-image|):[\s]*url[(][\"']?(https?:\/\/[^’\”]+[.](?:gif|png))[‘\”]?/g

感谢所有帮助。

最佳答案

此正则表达式模式将嵌套括号视为 url() 括号之间的可选重复组。

background-image:\s*url\(['"]?((?:\S*?\(\S*?\))*\S*?)['"]?\)

Javascript 片段:

const text = `background-image: url(https://www.aaa.com/xxx/picture.png); background-size: 100%...
background-image: url("https://www.aaa.com/xxx/picture(1_2)_pic(23).png")
background-image: url(https://www.aaa.com/xxx/picture)
`;
let re = /background-image:\s*url\(['"]?((?:\S*?\(\S*?\))*\S*?)['"]?\)/g;
let arr = [...text.matchAll(re)].map(x=>x[1]);
console.log(arr);

关于html - 寻找一个正则表达式来匹配背景图片url中的所有情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71362227/

相关文章:

python - 在 python 中搜索通配符的字符串并返回匹配位置

html - 网络的 future 是什么? XHTML 2、HTML 5 或其他什么?

javascript - 应用程序在键盘弹出窗口上搞砸了

html - 通过 CSS 中的行数限制文本

c# - 正则表达式删除连续字符

regex - 如何使用 Perl 将以下字符串中的逗号替换为 & ?

javascript - 重复页面显示不同

html - 悬停时在图像下方显示文本而不干扰其他元素

尝试将非空白与工作演示匹配时,Javascript Regexp 表现奇怪

python - 模式的惰性匹配