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

发布于 1周前 作者 zlyuanteng 来自 nodejs/Nestjs

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

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();"

求指点


3 回复

正则写的真丑。线索:

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

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

写这个正则表达式哪有那么复杂,还会把 rgba?给匹配了😂


混脸熟。

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

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

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

在处理 Node.js 中的字符串时,如果希望使用正则表达式移除所有图片 Base64 编码,可以通过匹配 Base64 编码的格式来实现。Base64 编码的图片通常以 data:image/png;base64,data:image/jpeg;base64, 等格式开头,后面跟着编码后的字符串。

以下是一个示例代码,展示了如何使用正则表达式在 Node.js 中处理掉字符串中的图片 Base64 编码:

const str = `
这是一个测试字符串,包含一张图片:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." alt="Image">
和一些文本内容。
`;

// 匹配 Base64 图片的正则表达式
const base64ImagePattern = /<img\s+[^>]*src="data:image\/[^;]+;base64,[^"]*"[^>]*>/g;

// 使用正则表达式替换匹配的内容为空字符串
const resultStr = str.replace(base64ImagePattern, '');

console.log(resultStr);

在这个例子中,正则表达式 <img\s+[^>]*src="data:image\/[^;]+;base64,[^"]*"[^>]*> 匹配了所有符合 Base64 图片格式的 <img> 标签。str.replace(base64ImagePattern, '') 则将这些匹配到的内容替换为空字符串,从而移除了字符串中的图片 Base64 编码。

这种方法能够有效地处理大多数情况下的 Base64 图片移除,但在实际应用中可能需要根据具体情况调整正则表达式。

回到顶部