javascript - 正则表达式匹配各种时间实例

标签 javascript regex

当尝试匹配这些不同风格的时间时,即:

const str = `
  12) 9 p.m. A walk away

  06) Noon. Snack 

  4) 10:30 a.m. A stroll`;

提取为:

[“晚上 9 点”、“中午”、“上午 10:30”]

我正在使用这个正则表达式:

/([0-1]?[0-9]|2[0-3]:[0-5]?[0-9]下午|上午|中午)/g

但是 str.match() 返回为:

[“12”、“9”、“06”、“中午”、“4”、“10”、“3”、“0”、“上午”]

捕获分组是否有问题?

最佳答案

您可以使用 (?::[0-5][0-9]) 匹配小时并将分钟部分设为可选?

在您的模式中,您对所有替代方案使用一个组,您希望一个组本身对一组替代方案进行分组。

上午和下午的部分。可以写成 [ap]\.m (注意转义点以与字面匹配)

整个外部组可以是非捕获组(?:,您可以从中获取匹配

为了防止部分匹配,您可以以单词边界开始模式 \b

该模式可以写为:

\b(?:(?:[01]?[0-9]|2[0-3])(?::[0-5][0-9])? [ap]\.m\.|Noon)

Regex demo

如果您想匹配 12 小时时钟时间:

\b(?:(?:1[0-2]|0?[1-9])(?::[0-5][0-9])? [ap]\.m\.|Noon)

Regex demo

const pattern = /\b(?:(?:[01]?[0-9]|2[0-3])(?::[0-5][0-9])? [ap]\.m\.|Noon)/g;
const str = `
  12) 9 p.m. A walk away

  06) Noon. Snack

  4) 10:30 a.m. A stroll`;

console.log(str.match(pattern));

关于javascript - 正则表达式匹配各种时间实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60025110/

相关文章:

javascript - 预加载器的淡出脚本不起作用

javascript - 在 IE8 上获取访问被拒绝错误

javascript - 当使用 require.js 并使用 r.js 创建单个文件时,我们仍然可以获得加载时间的好处吗?

javascript - 在javascript中替换url中的查询字符串

python - 将字符串元组转换为字典

regex - 在 tcl 中使用正则表达式识别换行符

javascript - swfobject 播放/暂停/停止

javascript - 如何从javascript获取数据并在php上显示

javascript - 用空格拆分字符串(包含标签)而不破坏 Javascript 中的标签或标签内部 html

java - 不允许使用波形符/控制台键的正则表达式