Express/Node.js中如何编写指定格式文件名的JS分词方法
文件名分词实现方案
针对固定格式id-string1-string2-string3.extension的文件名解析,提供两种可直接在Express/Node.js环境运行的实现:
正则匹配方案
直接通过捕获组匹配三个目标字段,一步完成解析,同时自带格式校验能力,不符合规则的输入会直接抛出异常,适合API入参校验场景。
/** * 解析指定格式文件名字符串 * @param {string} str 输入文件名 * @returns {{a: string, b: string, c: string}} 解析结果 */ function parseFileName(str) { // 正则捕获组说明: // 1. 第一组:匹配前三个短横线连接的分段,对应字段a // 2. 第二组:匹配最后一个短横线到扩展名之间的部分,对应字段b // 3. 第三组:匹配点后的文件扩展名,对应字段c const matchResult = str.match(/^([^-]+-[^-]+-[^-]+)-([^.]+)\.([^.]+)$/); if (!matchResult) { throw new Error('文件名格式不符合规范,需为 id-string1-string2-string3.extension 结构'); } return { a: matchResult[1], b: matchResult[2], c: matchResult[3] }; }
测试示例输入:
- 输入
Il2dK-Ud2d9-Kod2d-d9dwo.jpg,输出{a: 'Il2dK-Ud2d9-Kod2d', b: 'd9dwo', c: 'jpg'} - 输入
j54fwf3da-7jrg-9eujodww-kio98ujk.png,输出{a: 'j54fwf3da-7jrg-9eujodww', b: 'kio98ujk', c: 'png'}
非正则实现方案
如果不想维护正则规则,用原生字符串方法实现逻辑更直观,且兼容性更强——即使后续前三个分段内部出现额外短横线,也不需要调整逻辑就能正确取到最后一个短横线后的b字段。
/** * 解析指定格式文件名字符串 * @param {string} str 输入文件名 * @returns {{a: string, b: string, c: string}} 解析结果 */ function parseFileName(str) { // 先拆分扩展名 const lastDotIndex = str.lastIndexOf('.'); if (lastDotIndex === -1) { throw new Error('文件名缺少合法扩展名'); } const mainContent = str.slice(0, lastDotIndex); const extension = str.slice(lastDotIndex + 1); // 拆分短横线段,最后一段为b,剩余部分拼接为a const segments = mainContent.split('-'); if (segments.length < 4) { throw new Error('文件名短横线分段数量不足'); } const fieldB = segments.pop(); const fieldA = segments.join('-'); return { a: fieldA, b: fieldB, c: extension }; }
Express接口使用示例
可以直接将方法集成到API逻辑中,做好错误捕获即可:
const express = require('express'); const app = express(); app.get('/file/parse', (req, res) => { try { const { fileName } = req.query; const parseResult = parseFileName(fileName); res.json(parseResult); } catch (err) { res.status(400).json({ code: 400, message: err.message }); } }); app.listen(3000);
内容的提问来源于stack exchange,提问作者tazmin32w
相关产品推荐
相关产品推荐

