使用正则表达式提取background:url()中的内容
开发中经常碰见元素使用background
或者background-imgae
等样式表提供的属性来展示图片而不是img
使用标签,在修改的时候就会发现弊端在需要动态修改图片的时候没有img.src
那样顺手,简单的法子就是提取出元素的background
属性,然后使用substr
字符传截取获取到的值,马虎的思考一下这确实没问题,但是真这样做了之后就发现了一个问题(说的正式在下😄),不同浏览器下面同样的代码获取到的结果不一致
反例
<div id='test' style='background:url(https://www.baidu.com/img/bd_logo1.png) 200px 100px;width:200px;height:100px'></div>
document.querSelector('#test').style.background
chrome
url("https://www.baidu.com/img/bd_logo1.png") 200px 100px
firefox
rgba(0, 0, 0, 0) url("https://www.baidu.com/img/bd_logo1.png") repeat scroll 200px 100px
其它内核手头暂时没有,没有测试,使用传统的substr
肯定是行不通了,接下来只有使用正则表达式
去解决了
如果使用style.backgroundImage
这两浏览器获取到的值就会是一样的了
下面是使用正则表达式去获取目标内容
第一步
匹配出url(xxxx)
使用/url\("?'?.*"?'?\)/g
let reg = /url\("?'?.*"?'?\)/g
'rgba(0, 0, 0, 0) url("https://www.baidu.com/img/bd_logo1.png") repeat scroll 200px 100px'.match(reg)
// ['url("https://www.baidu.com/img/bd_logo1.png")']
'url(https://www.baidu.com/img/bd_logo1.png)'.match(reg)
// ['url("https://www.baidu.com/img/bd_logo1.png")']
第二步
剔除不相关的内容,/"|'|url|\(|\)/g
let reg = /"|'|url|\(|\)/g
'url("https://www.baidu.com/img/bd_logo1.png")'.replace(reg,'')
// https://www.baidu.com/img/bd_logo1.png
最终
综合前面的例子
function getBackgroundUrl(background){
let regBackgroundUrl = /url\("?'?.*"?'?\)/g;
let regReplace = /"|'|url|\(|\)/g;
return background.match(regBackgroundUrl)[0].replace(regReplace,'')
}
console.log(getBackgroundUrl('rgba(0, 0, 0, 0) url("https://www.baidu.com/img/bd_logo1.png") repeat scroll 200px 100px'))
// https://www.baidu.com/img/bd_logo1.png
"你的指尖,拥有改变世界的力量! "
欢迎关注我的个人博客:https://sugarat.top
分类:
开发/学习笔记
, javascript
标签:
js
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧