如何从Javascript中任何图像类型的base64字符串中剥离data:image部分

如何从Javascript中任何图像类型的base64字符串中剥离data:image部分,javascript,string,image,base64,Javascript,String,Image,Base64,我目前正在执行以下操作来解码Javascript中的base64图像: var strImage = ""; strImage = strToReplace.replace("data:image/jpeg;base64,", ""); strImage = strToReplace.replace("data:image/png;base64,", ""); strImage = strToReplace.replace("data:image/gif;base

我目前正在执行以下操作来解码Javascript中的base64图像:

    var strImage = "";
    strImage = strToReplace.replace("data:image/jpeg;base64,", "");
    strImage = strToReplace.replace("data:image/png;base64,", "");
    strImage = strToReplace.replace("data:image/gif;base64,", "");
    strImage = strToReplace.replace("data:image/bmp;base64,", "");
如上所述,我们接受四种最标准的图像类型(jpeg、png、gif、bmp)

然而,其中一些图像非常大,用replace扫描每个图像4-5次似乎是一种可怕的浪费,效率极低

是否有一种方法可以在一次传递中可靠地剥离base64图像字符串的数据:图像部分

也许是通过检测字符串中的第一个逗号


提前感谢。

您可以使用正则表达式:

var strImage = strToReplace.replace(/^data:image\/[a-z]+;base64,/, "");

  • ^
    表示在字符串的开头
  • 数据:图像
    表示数据:图像
  • \/
    表示/
  • [a-z]+
    表示a和z之间的一个或多个字符
  • ;base64,
    表示;base64
在“base64”处拆分变量字符串,然后取第二部分。

这对我很有用:

var strImage = strToReplace.split(',')[1];

我遇到了这个问题,想找到一种方法来去除任何标题。所以我想分享一下:

Regex.Replace(strToReplace, @"^.+?(;base64),", string.Empty))
这是从一个优秀的网站上获得的,该网站描述了如何:

尽可能少地匹配任何字符,直到找到“abc”,而不计算“abc”

您可以使用,这样就不必扫描所有对象。它的性能应该更好

使用这个正则表达式

/[data:image\/[a-z]*;[a-z0-9]*,.*]/gm

这对我来说很有效,Swift 5:

let ourBase64String:String = "base64 string"
let base64StringArray:[String] = ourBase64String.components(separatedBy: "base64,")
if(attachmentArray.count > 0){
   print(attachmentArray[1])
}

我不知道这对性能是否更好,但从逻辑上来说,我会说“是”(替换和正则表达式搜索整个字符串中的匹配项,indexof在第一个字符上断开,等于它的参数),也许我会做一些性能测试:
var strImage=strotreplace.Substring(strotreplace.indexof(',')+1)
strToReplace.replace(/^data:image\/\w+;base64,/,”)
我不明白为什么这么多公认的答案都有古怪的正则表达式解决方案。这很容易理解,执行起来也很快。有什么缺点吗?@JoshuaOhana如果编码字符串中还有另一个“base64”。。。否则我不知道。。。
let ourBase64String:String = "base64 string"
let base64StringArray:[String] = ourBase64String.components(separatedBy: "base64,")
if(attachmentArray.count > 0){
   print(attachmentArray[1])
}