web-dev-qa-db-ja.com

JavaScriptの任意の画像タイプのbase64文字列からdata:image部分を取り除くにはどうすればよいですか

私は現在、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,", "");

上記のとおり、最も標準的な4つの画像タイプ(jpeg、png、gif、bmp)を受け入れています。

ただし、これらの画像の一部は非常に大きく、1つ1つを置換して4〜5回スキャンすることは恐ろしい無駄であり、非常に非効率的です。

シングルパスでbase64画像文字列のdata:image部分を確実に取り除く方法はありますか?

おそらく、文字列の最初のカンマを検出することによって?

前もって感謝します。

10

正規表現を使用できます。

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

  • ^を意味します文字列の先頭
  • data:imagedata:imageを意味します
  • \//を意味します
  • [a-z]+を意味しますaとzの間の1つ以上の文字
  • ;base64,; base64、を意味します
22
Nicolò
var solution = string.split("base64,")[1];

変数文字列を2番目の部分よりも「base64」で分割します。

7
Jonas Wilms

これは私のために働きました:

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

ヘッダーを取り除く方法を探しているこの質問に出くわしました。だからこれを共有したかっただけです:

Regex.Replace(strToReplace, @"^.+?(;base64),", string.Empty))

これは、次の方法を説明する優れた answer から取得しました。

「abc」を数えることなく、「abc」が見つかるまで、できるだけ少ない文字に一致させます。

1
Daan van Hulst

この正規表現を使う

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