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

js:13KB或者xxxkb、xxxMB\xxxtb\xxb等多种情况怎么获取后面的单位

问:

13KB或者xxxkb、xxxMB\xxxtb\xxb等多种情况怎么获取后面的单位

回答:

当然可以!以下是使用 JavaScript 从类似 13KBxxxMB2TB 等字符串中提取单位(如 KBMBTB)的完整方法。


✅ 基本方法:提取末尾的单位(字母部分)

Javascript

浅色版本

function extractUnit(str) {const match = str.trim().match(/([a-zA-Z]+)$/);return match ? match[1].toUpperCase() : null; // 统一转为大写,便于处理
}// 测试示例
console.log(extractUnit("13KB"));   // 输出: "KB"
console.log(extractUnit("500MB"));  // 输出: "MB"
console.log(extractUnit("2TB"));    // 输出: "TB"
console.log(extractUnit("1024B"));  // 输出: "B"
console.log(extractUnit("xxxGB"));  // 输出: "GB"
console.log(extractUnit("8.5KB"));  // 输出: "KB"(支持小数)
console.log(extractUnit("  100PB  ")); // 输出: "PB"(自动去除空格)
console.log(extractUnit("123"));    // 输出: null(没有单位)

🔍 正则解释

Js

浅色版本

/([a-zA-Z]+)$/
  • ([a-zA-Z]+):匹配一个或多个英文字母,并捕获为一组。
  • $:确保匹配的是字符串末尾的部分。
  • .trim():去除首尾空格,避免 "100MB " 这类情况出错。

✅ 可选:只允许常见的存储单位(更严谨)

如果你只想匹配标准单位(如 B、KB、MB、GB、TB、PB),可以使用更精确的正则:

Javascript

浅色版本

function extractValidUnit(str) {const match = str.trim().match(/^(?:\d+\.?\d*\s*)?(B|KB|MB|GB|TB|PB)$/i);return match ? match[1].toUpperCase() : null;
}// 测试
console.log(extractValidUnit("13KB"));  // "KB"
console.log(extractValidUnit("500MB")); // "MB"
console.log(extractValidUnit("2TB"));   // "TB"
console.log(extractValidUnit("xyzXYZ")); // null(非法)

这个正则还支持带空格的情况(如 "100 KB"),稍作扩展即可:

Javascript

浅色版本

function extractUnitWithSpace(str) {const match = str.trim().match(/\s*(B|KB|MB|GB|TB|PB)$/i);return match ? match[1].toUpperCase() : null;
}console.log(extractUnitWithSpace("100 KB"));  // "KB"
console.log(extractUnitWithSpace("5.5 GB"));  // "GB"

🧪 实际应用场景(如处理文件大小)

Javascript

浅色版本

const sizes = ["13KB", "500MB", "2TB", "1024B", "8.5KB", "  300GB  "];const units = sizes.map(extractUnit);
console.log(units); // ["KB", "MB", "TB", "B", "KB", "GB"]

如果你的数据格式更复杂(比如包含 KiBMiB 或来自 API/HTML 的文本),也可以告诉我,我可以帮你定制更强大的解析逻辑。

http://www.lryc.cn/news/619390.html

相关文章:

  • FluxSelectMultiple 技术设计文档
  • 飞算JavaAI的中间件风暴:Redis + Kafka 全链路实战
  • docker network 与host的区别
  • 数据科学与爬虫技术学习笔记
  • 玩转Docker | 使用Docker部署WordPress网站服务
  • 【车联网kafka】Kafka核心架构与实战经验(第四篇)
  • 猿大师中间件:Chrome网页内嵌PhotoShop微信桌面应用程序
  • Jetson NX Python环境搭建:使用APT轻松安装NumPy, scikit-learn, OpenCV
  • java学习 leetcode 二分查找 图论
  • 图论理论部分
  • 【C++ STL】list详解和模拟
  • Day52--图论--101. 孤岛的总面积(卡码网),102. 沉没孤岛(卡码网),103. 水流问题(卡码网),104. 建造最大岛屿(卡码网)
  • day50 图论基础 卡码网98. 所有可达路径
  • 15-docker的企业级私有仓库之docker-harbor
  • 若依plus SpringCloud [DUBBO] 多模块异常抛出 异常里面包了一层异常
  • docker load镜像后 名字和标签异常解决
  • 【Docker项目实战】使用Docker部署todo任务管理器
  • 飞算JavaAI云原生实践:基于Docker与K8s的自动化部署架构解析
  • python环境依赖冲突问题(1)
  • Docker 在 Linux 中的额外资源占用分析
  • Java设计模式全景解析:从演进历程到创新实践
  • 【网络运维】Playbook进阶: 管理变量
  • Windows11 运行IsaacSim GPU Vulkan崩溃
  • ADB 无线调试连接(Windows + WSL 环境)
  • 药房智能盘库系统:基于CV与时间序列预测的库存革命
  • vue3 el-select el-button 在同一行显示
  • Vue:实现一个无线滚动列表的解决方案
  • 【密码学实战】国密SM2算法介绍及加解密/签名代码实现示例
  • 2021 年全国硕士研究生招生考试真题笔记
  • 若依前后端分离版学习笔记(九)——登录和操作日志