正则表达式解析图像数据URI

| 如果我有 :
<img src=\"data:image/gif;base64,R0lGODlhtwBEANUAAMbIypOVmO7v76yusOHi49AsSDY1N2NkZvvs6VVWWPDAutZOWJ+hpPPPyeqmoNlcYXBxdNTV1nx+gN51c4iJjEdHSfbc19M+UOeZk7m7veSMiNtpauGBfu2zrc4RQSMfIP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAC3AEQAAAb/QJBwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweEwum8/otHrNbrvf8Lh8Tq/b7/i8fs\" />
如何将数据部分解析为: 哑剧类型(image / gif) 编码(base64) 图像数据(二进制数据)
已邀请:
编辑:扩展以显示用法
var regex = new Regex(@\"data:(?<mime>[\\w/\\-\\.]+);(?<encoding>\\w+),(?<data>.*)\", RegexOptions.Compiled);

var match = regex.Match(input);

var mime = match.Groups[\"mime\"].Value;
var encoding = match.Groups[\"encoding\"].Value;
var data = match.Groups[\"data\"].Value;
注意:正则表达式适用于有问题的输入。如果也指定了“ 2”,它将不起作用,必须重写。
实际上,您不需要正则表达式。根据维基百科,数据URI格式为
data:[<MIME-type>][;charset=<encoding>][;base64],<data>
因此,请执行以下操作:
byte[] imagedata = Convert.FromBase64String(imageSrc.Substring(imageSrc.IndexOf(\",\") + 1));
数据URI有点复杂,它们可以包含参数,媒体类型等……有时您需要了解此信息,而不仅仅是数据。 要解析数据URI并提取所有相关部分,请尝试以下操作:
/**
 * Parse a data uri and return an object with information about the different parts
 * @param {*} data_uri 
 */
function parseDataURI(data_uri) {
    let regex = /^\\s*data:(?<media_type>(?<mime_type>[a-z\\-]+\\/[a-z\\-\\+]+)(?<params>(;[a-z\\-]+\\=[a-z\\-]+)*))?(?<encoding>;base64)?,(?<data>[a-z0-9\\!\\$\\&\\\'\\,\\(\\)\\*\\+\\,\\;\\=\\-\\.\\_\\~\\:\\@\\/\\?\\%\\s]*\\s*)$/i;
    let result = regex.exec(data_uri);
    let info = {
        media_type: result.groups.media_type,
        mime_type: result.groups.mime_type,
        params: result.groups.params,
        encoding: result.groups.encoding,
        data: result.groups.data
    }
    if(info.params)
        info.params = Object.fromEntries(info.params.split(\';\').slice(1).map(param => param.split(\'=\')));
    if(info.encoding)
        info.encoding = info.encoding.replace(\';\',\'\');
    return info;
}
这是我的正则表达式,在这里我也必须分隔mime类型(图像/ jpg)。
^data:(?<mimeType>(?<mime>\\w+)\\/(?<extension>\\w+));(?<encoding>\\w+),(?<data>.*)

要回复问题请先登录注册