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

如何从指定字符串高效提取并格式化日期为目标数组?

解决方案

可以通过正则捕获分组+一次匹配遍历直接生成目标数组,无需先提取原始日期再二次处理,效率更高。核心思路是用正则捕获每个日期的日、月、年组件,直接基于组件生成两种格式的日期,最后按要求合并。

方法一:使用matchAll(简洁现代写法)

const string = '1: Mode: SOME Date range: 01/01/2018-31/12/2018 User: HANS';
// 正则捕获日、月、年分组
const dateRegex = /(\d{2})\/(\d{2})\/(\d{4})/g;
// 匹配所有符合格式的日期,拿到分组数据
const dateMatches = [...string.matchAll(dateRegex)];

// 生成YYYY-MM-DD格式数组
const yyyymmddList = dateMatches.map(([, day, month, year]) => `${year}-${month}-${day}`);
// 生成YYYYMM格式数组
const yyyymmList = dateMatches.map(([, day, month, year]) => `${year}${month}`);

// 合并成目标数组
const finalResult = [...yyyymmddList, ...yyyymmList];
console.log(finalResult); // 输出: ['2018-01-01', '2018-12-31', '201801', '201812']

方法二:使用exec循环(兼容旧环境)

如果需要兼容不支持matchAll的旧环境,可采用exec循环遍历匹配:

const string = '1: Mode: SOME Date range: 01/01/2018-31/12/2018 User: HANS';
const dateRegex = /(\d{2})\/(\d{2})\/(\d{4})/g;
const yyyymmddList = [];
const yyyymmList = [];
let match;

// 循环匹配所有日期,提取分组数据
while ((match = dateRegex.exec(string)) !== null) {
  const [, day, month, year] = match;
  yyyymmddList.push(`${year}-${month}-${day}`);
  yyyymmList.push(`${year}${month}`);
}

const finalResult = [...yyyymmddList, ...yyyymmList];
console.log(finalResult); // 输出目标数组

优势说明

  • 仅做一次正则匹配遍历,直接捕获日期的日、月、年组件,避免了先提取原始日期字符串再二次拆分解析的额外开销。
  • 两种格式的日期都基于捕获到的组件直接拼接生成,逻辑清晰且性能最优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:02:54