gpt4 book ai didi

javascript - 正则表达式模式匹配从 Javascript 中的字符串中提取时间,给出意想不到的结果

转载 作者:行者123 更新时间:2023-11-28 07:28:08 25 4
gpt4 key购买 nike

我正在尝试匹配可能的表示时间的方式。我正在尝试匹配 X、XX、XX:XX、X am、X pm、XXXX hr 等,其中 X 是可以代表时间的可能数字。

timereg = /([0-1][0-9]|2[0-3]|[1-9])[:\s]*([0-5][0-9])?[\s]*(am|pm|hrs|hr)?/gi

我尝试了以下示例字符串进行正则表达式匹配,并在每次试验下方的 Chrome 控制台中看到了输出。

match = timereg.exec("Pick up at 5pm")
["5pm", "5", undefined, "pm"]

match = timereg.exec("Pick up at 5:30")
["5:30", "5", "30", undefined]

match = timereg.exec("Pick up kids at 5")
null

match = timereg.exec("Pick up kids at 15")
["15", "15", undefined, undefined]

match = timereg.exec("Pick up kids at 05")
["05", "05", undefined, undefined]

match = timereg.exec("Pick up kids at 20")
null

match = timereg.exec("Pick up kids at 21")
["21", "21", undefined, undefined]

match = timereg.exec("Pick up kids at 22")
null

match = timereg.exec("Pick up kids at 23")
["23", "23", undefined, undefined]

match = timereg.exec("Pick up kids at 1")
null

match = timereg.exec("Pick up kids at 2")
["2", "2", undefined, undefined]

match = timereg.exec("Pick up kids at 3")
null

match = timereg.exec("Pick up kids at 4")
["4", "4", undefined, undefined]

match = timereg.exec("Pick up kids at 5")
null

match = timereg.exec("Pick up kids at 6")
["6", "6", undefined, undefined]

我看到“21”、“23”、“2”、“4”、“6”匹配,而“20”、“22”、“1”、“3”、“5”则不匹配。我无法弄清楚为什么会这样。任何帮助将不胜感激。

最佳答案

这是由于在正则表达式中使用了全局 g 标志并重复使用了相同的正则表达式。当在多个 exectest 方法调用之间与 g 标志一起使用时,正则表达式对象会记住 lastIndex

删除 g 标志,此问题将得到修复。

或者在每次调用 exec 之前放置此代码以重置 lastIndex 属性:

timereg.lastIndex = 0;
match = timereg.exec("Pick up kids at 20");

关于javascript - 正则表达式模式匹配从 Javascript 中的字符串中提取时间,给出意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29417938/

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