当前位置: 首页 > java >正文

使用正则表达式检测Base64字符串并提取图片类型及正文的JavaScript函数,代码精简且高效

自己用的。源代码:

function parseBase64(str) {// 尝试匹配 data URI 格式(包含图片类型)const dataUriMatch = str.match(/^data:image\/(\w+);base64,([A-Za-z0-9+/=\s]+)$/);if (dataUriMatch) {const imageType = dataUriMatch[1];const base64Data = dataUriMatch[2].replace(/\s/g, '');if (/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(base64Data)) {return { type: imageType, data: base64Data };}}// 尝试匹配纯Base64字符串(无图片类型)const pureBase64 = str.replace(/\s/g, '');if (/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(pureBase64)) {return { type: null, data: pureBase64 };}return null; // 无效Base64
}

示例:

// 测试1:带图片类型的有效Base64
const imgBase64 = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=';
console.log(parseBase64(imgBase64));
// 输出: { type: "png", data: "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII=" }// 测试2:纯Base64字符串
const textBase64 = 'SGVsbG8gV29ybGQh'; // "Hello World!"的Base64编码
console.log(parseBase64(textBase64));
// 输出: { type: null, data: "SGVsbG8gV29ybGQh" }// 测试3:无效Base64
console.log(parseBase64("invalid@base64")); // 输出: null

功能说明:

  1. 检测Data URI格式

    • 使用正则/^data:image\/(\w+);base64,([A-Za-z0-9+/=\s]+)$/匹配:

      • image/\w+:提取图片类型(如png/jpeg)

      • ([A-Za-z0-9+/=\s]+):捕获Base64正文(允许空格和等号)

    • 移除正文中的空格后验证Base64有效性

  2. 检测纯Base64字符串

    • 移除所有空格后使用严格正则验证:

      • ^([A-Za-z0-9+/]{4})*:匹配4的倍数长度的有效字符组

      • ([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$:处理结尾的填充等号

  3. 返回结果

    • 有效Data URI:返回{ type: "图片类型", data: "Base64正文" }

    • 有效纯Base64:返回{ type: null, data: "Base64正文" }

    • 无效输入:返回null

正则关键点:

  • Base64有效性验证/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/

    • 确保字符集合法(A-Z/a-z/0-9/+/)

    • 验证长度是4的倍数

    • 正确处理结尾的=填充符

  • 空格处理:在验证前移除所有空格(replace(/\s/g, '')),增强兼容性

此方案兼顾准确性与精简性,可高效检测常见Base64字符串格式。

更多资源见 wangpanmao.com 网盘猫更多免费代码

https://wangpanmao.com 

http://www.xdnf.cn/news/17563.html

相关文章:

  • How Websites Work 网站如何运作
  • Linux入门指南:26个基础命令全解析
  • C语言(长期更新)第10讲:操作符详解(二)
  • vue3项目中在一个组件中点击了该组件中的一个按钮,那么如何去触发另一个组件中的事件?
  • playwright-mcp 项目全解析:从理论到实践
  • 量子计算机实用化:从理论到现实的艰难跨越
  • (一)Tailwindcss
  • Win10清理C盘步骤
  • Spring事务失效的常见原因
  • ROS2 QT 多线程功能包设计
  • 基于PyTorch一文讲清楚损失函数与激活函数并配上详细的图文讲解
  • redis集群-docker环境
  • 咪咕MGV3200-KLH_GK6323V100C_板号E503744_安卓9_短接强刷包-可救砖
  • 大数据架构演变之路
  • java的三种组件漏洞靶场攻略
  • LeetCode 组合总数
  • 人工智能系列(8)如何实现无监督学习聚类(使用竞争学习)?
  • 1. 电阻选型
  • 计算机网络:如何理解目的网络不再是一个完整的分类网络
  • mpv core_thread pipeline
  • jmeter常规压测【读取csv文件】
  • 北京JAVA基础面试30天打卡06
  • Vulhub靶场组件漏洞(XStream,fastjson,Jackson)
  • 北京天津廊坊唐山打捞失物日记
  • 双非二本如何找工作?
  • jxWebUI--按钮
  • 黑马SpringBoot+Elasticsearch作业2实战:商品搜索与竞价排名功能实现
  • 【RocketMQ 生产者和消费者】- ConsumeMessageConcurrentlyService 并发消费消息
  • socket编程中系统调用send()详细讲解
  • MySQL自增ID与UUID的区别及其在索引分裂中的表现与优化