You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

有没有比多次调用match正则匹配更优的字符串解析实现方案?

优化方案

核心优化点

  • 仅用1次正则扫描解析整个key字符串,避免多次调用match()重复扫描字符串带来的性能损耗,代码可维护性更高,后续加字段只需要更新映射表即可
  • 仅读取解析1次localStorage数据,避免重复IO和重复JSON解析的开销,也避免了两次读取数据不一致的极端问题
  • 省去后置属性遍历清洗逻辑,在赋值阶段就完成数据格式处理和空值过滤,逻辑更直接
  • 增加了空值容错,避免localStorage无对应数据时抛出JS错误

优化后代码

// 字段前缀和结果属性的映射表,后续新增字段只需修改此处即可
const FIELD_MAPPING = {
  N: 'matchNumber',
  DSC: 'matchSeconds',
  MC: 'matchMinutes',
  HC: 'matchHours',
  DD: 'matchDay',
  MD: 'matchMonth',
  YD: 'matchYear'
}

// 注意原代码中key的取值是字符串,需要补充引号
const key = 'N001DSC29MC22HC22DD04MD09YD21'

function get(key) {
  const res = {}
  // 一次正则匹配所有字段
  const fieldReg = /(N|DSC|MC|HC|DD|MD|YD)(\d{2,3})/g
  let matchResult
  while ((matchResult = fieldReg.exec(key)) !== null) {
    const [, prefix, value] = matchResult
    res[FIELD_MAPPING[prefix]] = value
  }
  // 仅读取一次localStorage
  const storeRecord = JSON.parse(localStorage.getItem(key) || '{}')
  if (storeRecord.title) res.title = storeRecord.title
  if (storeRecord.description) res.description = storeRecord.description
  return res
}

get(key)

和原代码的功能一致性说明

上述代码和原代码输出结果完全一致:

  • 所有从key中解析的数值字段均为字符串格式,和原代码join('')后的结果相同
  • 自动过滤不存在的字段,不会返回值为null/undefined的属性,和原代码删除空属性的逻辑一致
  • 读取localStorage的逻辑一致,仅增加了空值容错

内容的提问来源于stack exchange,提问作者user15889308

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:09:02