css 样式字符串(很长,仅仅 10w 字符),里面很多 icon (图片)的 base64 url 字符,希望正则处理掉 处理范围:经过观察 base64 url 都是包裹在 'url(' 和 ')' 中,用正则替换成'url()',注意范围
data 样例 1 url(data:image/png;base64,iVBOR.........QmCC)
自己写了一个但是会删除 base64 之外(图片 url 能替换掉,但有误杀,貌似范围太大还是怎么着) replace(/(?:(?:(|url()[^)]*))/g, 'url()') 错误示例 'rgb(240, 80, 80);'.replace(/(?:(?:(|url()[^)]*))/g, 'url()') "rgburl();"
求指点
1
xiangyuecn 2019-07-20 09:54:33 +08:00
正则写的真丑。线索:
1. url(...) 肯定会出现'('和')'字符,里面的内容 99.999%不会出现'('和')'字符,用')'来识别结束部分 2. url 里面如果出现'data:',99.999%是 data url,用'data:image'来识别这种 css 的内联图片 写这个正则表达式哪有那么复杂,还会把 rgba?给匹配了😂 |
2
mystorp 2019-07-23 08:54:44 +08:00
混脸熟。
这个问题就是正则表达式替换,只要正则写对了,剩下就是处理好捕获的内容 let re = /url\(([^\)]+)\)/g; cssText.replace(re, function(_, dataUrl){ // 这里的 dataUrl 需要分割一下,如果你不想要它,忽略 return ""; }) |