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

如何用JS正则精准匹配指定范围年份并实现简洁替换?

优化方案

1. 精准匹配单个年份

如果只需要替换特定年份,直接把目标年份写进正则,完全避免误匹配其他无关四位数字:

let str = 'Document created in 1999';
let str_r = str.replaceAll(/1999/g, '2022'); // 仅替换1999
console.log(str_r); // 输出 "Document created in 2022"

let str1 = 'Document created in 2000';
let str_r1 = str1.replaceAll(/2000/g, '2023'); // 仅替换2000
console.log(str_r1); // 输出 "Document created in 2023"

2. 匹配指定年份范围

如果要处理连续或离散的年份区间,用正则分组限定匹配范围,再结合回调函数动态替换:

// 匹配1999、2000、2001这三个目标年份
const targetYearRegex = /(1999|200[01])/g;

let str2 = 'I was created in 2001';
let result = str2.replace(targetYearRegex, match => {
  if (match === '1999') return '2022';
  if (match === '2000') return '2023';
  if (match === '2001') return '2024';
  return match;
});
console.log(result); // 输出 "I was created in 2024"

3. 批量映射处理(高效简洁)

如果替换的年份与目标值对应关系明确,用对象做映射表,配合动态生成的正则批量处理,代码复用性更高:

// 定义年份替换映射表
const yearReplaceMap = {
  '1999': '2022',
  '2000': '2023',
  '2001': '2024'
};

// 动态生成匹配所有目标年份的正则
const yearRegex = new RegExp(Object.keys(yearReplaceMap).join('|'), 'g');

// 批量处理多个字符串
const strList = [
  'Document created in 1999',
  'Document created in 2000',
  'I was created in 2001'
];

const results = strList.map(str => str.replace(yearRegex, match => yearReplaceMap[match]));
console.log(results);
// 输出结果:
// ["Document created in 2022", "Document created in 2023", "I was created in 2024"]

以上方案都能精准定位目标年份,不会误改字符串中的其他四位数字(如文档编号、版本号等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:55:20