Regex模式匹配,从Javascript中的字符串中提取时间,结果出乎意料
Regex pattern match to extract time from a string in Javascript giving unexpected results
我正在尝试匹配表示时间的可能方式。我正在尝试匹配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
标志,并重复使用相同的正则表达式。Regex对象在多个exec
或test
方法调用之间与g
标志一起使用时会记住lastIndex
。
删除g
标志,这将得到修复。
或者在每次调用exec
之前放置此代码以重置lastIndex
属性:
timereg.lastIndex = 0;
match = timereg.exec("Pick up kids at 20");
相关文章:
- 使用时刻.js从日期时间中提取时间
- 是否可以自动拉取“随机”;标签“;从一长串文本中提取
- Regex模式匹配,从Javascript中的字符串中提取时间,结果出乎意料
- Mongoose查询在两个日期时间之间提取数据
- imacros javascript在抓取的一段时间内挂起或减慢速度
- 我如何从jquery中的html表中提取从时间,到时间(约会时间)
- 从时刻 js 对象中提取时间
- Javascript 从 Youtube URL 中提取时间参数
- 带有“日期时间”x轴的图表 - 在向下钻取时使用类别
- Momentjs 抓取今天的日期并设置时间会导致它快进 24 小时
- 使用Chrome抓取工具从JavaScript网站中提取数据
- 避免Facebook从网页中提取og元标记数据/或抓取
- 提取格林威治标准时间时差
- 使用 javascript 提取并浏览文件夹中.ZIP文件修改时间戳
- 使用Angular js从datetime中提取时间
- jQuery:抓取日期&来自网页的时间数据
- 从需要登录[Node.js]的web应用程序中提取(抓取)数据
- Facebook时间线错误3502,调试工具不会抓取localhost
- 对表示时间的字符串进行排序,并取最接近的字符串
- 如何使用python在网页上提取动态时间计数器