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

如何使用JavaScript正则从多行字符串中提取HH:MM格式的时间

JavaScript 正则提取时间段解决方案

匹配失败原因

  • 原正则使用了开头^和结尾$锚点,要求匹配完整输入字符串,而你的需求是从长文本中提取子片段,两个锚点直接导致匹配返回false
  • 原正则仅支持匹配单个AM/PM格式的时间点,没有覆盖时间段连接符、第二部分时间、时区后缀的匹配规则

可用实现方案

匹配规则说明

针对你给出的示例格式(12小时制时间段 + 3位大写字母时区),使用如下正则即可完成提取:
/(0?[1-9]|1[0-2]):[0-5]\d\s?[AP]\.?M\.?\s*-\s*(0?[1-9]|1[0-2]):[0-5]\d\s?[AP]\.?M\.?\s+[A-Z]{3}/i
规则拆解:

  • (0?[1-9]|1[0-2]):[0-5]\d:匹配12小时制的小时:分钟格式
  • \s?[AP]\.?M\.?:匹配可选空格 + AM/PM(支持带点的A.M./P.M.格式,不区分大小写)
  • \s*-\s*:匹配时间段连接符,前后支持任意数量空格
  • \s+[A-Z]{3}:匹配空格 + 3位大写字母时区

代码示例

const inputStr = "Please provide access to the engineer: last name: XYZ first name: ABC date: 02nd November 2021 time window: 11:00AM - 07:00PM CET";
const timeRangeReg = /(0?[1-9]|1[0-2]):[0-5]\d\s?[AP]\.?M\.?\s*-\s*(0?[1-9]|1[0-2]):[0-5]\d\s?[AP]\.?M\.?\s+[A-Z]{3}/i;
const matchResult = inputStr.match(timeRangeReg);
if (matchResult) {
  // 提取到的时间段
  console.log(matchResult[0]); // 输出:11:00AM - 07:00PM CET
}

适配扩展调整

如果需要适配更多场景,可以按需修改正则规则:

  • 支持4位时区缩写:将末尾[A-Z]{3}改为[A-Z]{3,4}
  • 支持24小时制时间:将小时匹配规则(0?[1-9]|1[0-2])改为([01]?[0-9]|2[0-3])
  • 支持不带AM/PM的格式:删除对应匹配段即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:15:02