当尝试匹配这些不同风格的时间时,即:
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)
如果您想匹配 12 小时时钟时间:
\b(?:(?:1[0-2]|0?[1-9])(?::[0-5][0-9])? [ap]\.m\.|Noon)
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/