gpt4 book ai didi

javascript 正则表达式与最后一组不匹配;从字符串中提取时间

转载 作者:行者123 更新时间:2023-11-30 14:45:53 27 4
gpt4 key购买 nike

比赛中

'meeting room 3 @ 5 am - 6 pm bob'
.match(/(@|at)?\s*?(\d+)\s*?(am|pm|AM|PM)?\s*?-\s*?(\d+)\s*?(am|pm|AM|PM)?/)

为什么最后一个pm不匹配?

结果是 ["@5 am - 6","@","5","am","6",null]"

我希望 nullpm

谢谢

最佳答案

让所有的 \s*? 变得贪婪(尤其是最后一个,它是罪魁祸首):

/(@|at)?\s*(\d+)\s*(am|pm|AM|PM)?\s*-\s*(\d+)\s*(am|pm|AM|PM)?/
^

参见 regex demo

重点是 (\d+)\s*?(am|pm|AM|PM)?(\d+) 匹配并捕获 1 个或多个数字>,那么正则表达式引擎会尝试匹配 (am|pm|AM|PM)? 模式,而不是 \s*?,因为 \s*? 是一个延迟量化的原子,因此首先被跳过。 (am|pm|AM|PM)? 模式可以匹配一个空字符串,它确实如此。它匹配紧跟在数字之后的空字符串,正则表达式引擎称它为返回有效匹配的一天。

关于javascript 正则表达式与最后一组不匹配;从字符串中提取时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48938419/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com