使用JS编写特定值字符串解析器的最优方案咨询
实现方案说明
方案选型结论
- 更推荐使用正则匹配实现,优于手动字符串操作:
- 规则匹配逻辑更简洁,无需手动处理空格、引号、分隔符等边界情况
- 执行效率满足绝大多数业务场景,代码可维护性更高
具体实现思路
- 先通过正则匹配提取
#recordNum-后的数字,同时捕获括号内的可选内容 - 对捕获到的括号内容,再分别匹配
Description和Date对应的双引号包裹的值,匹配失败则返回null
可直接使用的实现代码
function parseRecordStr(str) { // 第一层匹配:校验基础格式,提取编号、括号内可选内容 const baseReg = /^#recordNum-(\d+)(?:\s*\((.*)\))?$/ const baseMatch = str.match(baseReg) // 不符合基础格式直接返回null if (!baseMatch) return null const result = { recordNum: parseInt(baseMatch[1], 10), description: null, date: null } const bracketContent = baseMatch[2] if (!bracketContent) return result // 提取Description字段值 const descMatch = bracketContent.match(/Description:\s*"([^"]*)"/) if (descMatch) result.description = descMatch[1] // 提取Date字段值 const dateMatch = bracketContent.match(/Date:\s*"([^"]*)"/) if (dateMatch) result.date = dateMatch[1] return result }
效果测试示例
输入你给出的样例字符串:
const testStr = '#recordNum-1000 (Description: "Test", Date: "1/31/2021")' console.log(parseRecordStr(testStr)) // 输出:{ recordNum: 1000, description: 'Test', date: '1/31/2021' }
边界场景适配:
- 输入
#recordNum-200,输出{ recordNum: 200, description: null, date: null } - 输入
#recordNum-300 (Description: "Demo"),输出{ recordNum: 300, description: 'Demo', date: null }
内容的提问来源于stack exchange,提问作者Cineno28
相关产品推荐
相关产品推荐

