js 正则处理掉字符串中图片 base64 码

2019-07-19 18:39:48 +08:00
 duanzs

css 样式字符串(很长,仅仅 10w 字符),里面很多 icon (图片)的 base64 url 字符,希望正则处理掉 处理范围:经过观察 base64 url 都是包裹在 'url(' 和 ')' 中,用正则替换成'url()',注意范围

data 样例 1 url(data:image/png;base64,iVBOR.........QmCC)

data 样例 2 url('http://mcsstest.jd.com/static/css/data:image/png;base64,iVB//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+dQ58GAAAACXBIWXMAAArwAAAK8AFCrDSYAAAAJXRFWHRTb2Z0d2FyZQBNYWNyb21lZGlhIEZpcmV3b3JrcyBNWCAyMDA0h3aszwAAG+FJREFUeJztnX9gk8XdwB8lu9hqLGbt001kaJhdDEbNkPijoWnSBWTShshSoJG4ufh22BlsJ6sd2BHlbecIUxvSKoK+OLCoIMWO8iOZYtcNeZmOAkV5fKmmrU72UmHqO/Pne/f8SO7uuadABWRz3zZPnjyffO++d9/nnufunrsLBySxQQGEcGhjDNvSUGxhI0WMdR0OUTrqjDhptYU7HDZRHB1hnNh0oTzlUx5BQLAgLx2Ckk6upwgoyHNIHxw0Kc4LIh3jYIom4by6EBAEaJyaeLy61lbToFFNhGsWo/Sk1cRkrquDO61fWr/h8UV9VhZSemlwAAAABJRU5ErkJggg==');

自己写了一个但是会删除 base64 之外(图片 url 能替换掉,但有误杀,貌似范围太大还是怎么着) replace(/(?:(?:(|url()[^)]*))/g, 'url()') 错误示例 'rgb(240, 80, 80);'.replace(/(?:(?:(|url()[^)]*))/g, 'url()') "rgburl();"

求指点

5218 次点击
所在节点    Node.js
2 条回复
xiangyuecn
2019-07-20 09:54:33 +08:00
正则写的真丑。线索:

1. url(...) 肯定会出现'('和')'字符,里面的内容 99.999%不会出现'('和')'字符,用')'来识别结束部分

2. url 里面如果出现'data:',99.999%是 data url,用'data:image'来识别这种 css 的内联图片

写这个正则表达式哪有那么复杂,还会把 rgba?给匹配了😂
mystorp
2019-07-23 08:54:44 +08:00
混脸熟。

这个问题就是正则表达式替换,只要正则写对了,剩下就是处理好捕获的内容

let re = /url\(([^\)]+)\)/g;

cssText.replace(re, function(_, dataUrl){
// 这里的 dataUrl 需要分割一下,如果你不想要它,忽略
return "";
})

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/584514

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX