给定一个字符串"14:00-18:00"
我希望得到它的开始和结束时间。
我的代码如下所示:
var startTime = hourRange.match(/([0-9]{2}\:[0-9]{2})(?:\-)/);
var endTime = hourRange.match(/(?:\-)([0-9]{2}\:[0-9]{2})/);
在像Regex101这样的东西上分别返回14:00和18:00。但在Javascript中,第一个返回['14:00-', '14:00']
,第二个返回['-18:00', '18:00']
。
我做错了什么?
答案 0 :(得分:1)
我认为关于匹配和捕获之间的区别可能存在一些混淆,所以要澄清:正则表达式匹配一个(只有一个,没有{ {1}}修饰符)字符串的一部分。在这个匹配中,它可以捕获多个子串。
您的输出是预期的行为,因为match
函数返回一个如下组成的数组:
第一个元素是整场比赛
g
匹配 ([0-9]{2}:[0-9]{2})-
,以便第一项是什么。
以下项目是捕获组,按照正则表达式中的左括号的显示顺序。
14:00-
在第一个捕获组中捕获 ([0-9]{2}:[0-9]{2})-
,这样该数组的第二项将是什么。
如果在14:00
上使用(\d{2}:\d{2})-(\d{2}:\d{2})
,则整体匹配(结果数组中的第一项)是整个字符串,实际时间在第1组和第2组中捕获。开始时间和结束时间是结果数组的第二个和第三个元素。
所以从一般意义上讲,如果你只关心捕获组的值,你可以扔掉索引14:00-18:00
的元素,它始终是整体匹配。
希望能回答你的问题。