js:13KB或者xxxkb、xxxMB\xxxtb\xxb等多种情况怎么获取后面的单位
问:
13KB或者xxxkb、xxxMB\xxxtb\xxb等多种情况怎么获取后面的单位
回答:
当然可以!以下是使用 JavaScript 从类似 13KB
、xxxMB
、2TB
等字符串中提取单位(如 KB
、MB
、TB
)的完整方法。
✅ 基本方法:提取末尾的单位(字母部分)
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"]
如果你的数据格式更复杂(比如包含 KiB
、MiB
或来自 API/HTML 的文本),也可以告诉我,我可以帮你定制更强大的解析逻辑。