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

使用正则表达式检测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.dtcms.com/a/324293.html

相关文章:

  • 250810-OpenWebUI集成Dify应用
  • 《设计模式》策略模式
  • STM32的计数模式和pwm模式
  • 亚麻云之数据安家——RDS数据库服务入门
  • sqli-labs-master/Less-62~Less-65
  • 01.【面试题】在SpringBoot中如何实现多数据源配置
  • (Python)爬虫进阶(Python爬虫教程)(CSS选择器)
  • 2025年全国青少年信息素养大赛Scratch编程践挑战赛-小低组-初赛-模拟题
  • Linux系统编程Day11 -- 进程状态的优先级和特性
  • 移动端音频处理实践:59MB变声应用的技术实现分析
  • 机器学习-增加样本、精确率与召回率
  • LeetCode 869.重新排序得到 2 的幂:哈希表+排序(一次初始化)
  • Android 16 KB页面大小适配的权威技术方案总结
  • Android快速视频解码抽帧FFmpegMediaMetadataRetriever,Kotlin(2)
  • Android 开发问题:Invalid id; ID definitions must be of the form @+id/ name
  • 010601抓包工具及证书安装-基础入门-网络安全
  • 浅谈 A2A SDK 核心组件
  • 电脑本地摄像头做成rtsp流调用测试windows系统中
  • 【Docker实战】将Django应用容器化的完整指南
  • Pytorch深度学习框架实战教程-番外篇10-PyTorch中的nn.Linear详解
  • Linux-静态配置ip地址
  • 怎么将视频转换成字幕python作为工具
  • 计算机视觉(CV)——pytorch张量基本使用
  • 深入解析Java中的String、StringBuilder与StringBuffer:特性、区别与最佳实践
  • Gin 框架中的模板引擎使用指南
  • LeetCode 每日一题 2025/8/4-2025/8/10
  • mpv core_thread pipeline
  • c语言常见错误
  • MySQL 处理重复数据详细说明
  • ADK(Agent Development Kit)【2】调用流程详解