JavaScript如何正则匹配拆分日期范围字符串中的两个日期
问题原因
你原有代码无法拿到第二个日期,核心原因有两个:
- 正则没有添加全局匹配标识
g,非全局模式下String.match()只会匹配到第一个符合规则的字符串,不会继续向后查找第二个日期 - 正则中设置的三个括号捕获组,是用来拆分单个日期内的月、日、年片段的,所以匹配结果从索引1开始返回的是单个日期内部的分段值,也就是你拿到的
01,和第二个日期没有关系
实现方法
你可以根据场景选下面任意一种方法,都能得到期望的输出结果:
方法1:正则全局匹配
给正则加上全局标识g,同时去掉不必要的内部分段捕获组,就能直接提取到所有符合格式的完整日期:
var date = "01-01-2000 - 01-01-2010"; var dateList = date.match(/\d{2}-\d{2}-\d{4}/g); console.log(dateList[0]); // 01-01-2000 console.log(dateList[1]); // 01-01-2010
这个方法兼容性好,哪怕字符串里两个日期之间的空格数量不固定,也能正确提取。
方法2:固定分隔符拆分
如果你确定两个日期固定使用-作为分隔符,直接用字符串拆分的方法更简单,性能也更高:
var date = "01-01-2000 - 01-01-2010"; var dateList = date.split(' - '); console.log(dateList[0]); // 01-01-2000 console.log(dateList[1]); // 01-01-2010
如果分隔符前后可能存在数量不定的空格,可以用正则做拆分规则适配:
var dateList = date.split(/\s*-\s*/);
内容的提问来源于stack exchange,提问作者Sidhart
相关产品推荐
相关产品推荐

