Javascript Regexp匹配时间范围
我试图创建一个正则表达式,用于在Javascript中解析和验证时间范围。请记住,我只是希望解析结构正确的字符串。关于时间范围的验证逻辑随后进行 要求:Javascript Regexp匹配时间范围,javascript,regex,Javascript,Regex,我试图创建一个正则表达式,用于在Javascript中解析和验证时间范围。请记住,我只是希望解析结构正确的字符串。关于时间范围的验证逻辑随后进行 要求: 时间元素始终以24小时表示,并且应为(HH:mm) 格式 时间范围定义为两个由破折号分隔的时间元素 字符串应至少有一个或多个时间范围,并用逗号分隔 匹配模式应该容忍元素之间的空格 已验证的字符串应整体匹配或完全不匹配 我得出的结论如下: /((?:[01]\d:[0-5][0-9]|2[0-3]:[0-5][0-9])(?:\s?)-(?:\s
/((?:[01]\d:[0-5][0-9]|2[0-3]:[0-5][0-9])(?:\s?)-(?:\s?)(?:[01]\d:[0-5][0-9]|2[0-3]:[0-5][0-9])(?:\s?,\s?)?)/g
这似乎满足了除第5条以外的所有规则。也就是说,如果存在不正确的字符,它们就根本不匹配,但表达式作为一个整体不会失败
有没有办法在这个正则表达式中嵌入规则5?添加锚来标记字符串的开始和结束:
^((?:[01]\d:[0-5][0-9]| 2[0-3]:[0-5][0-9])(?:\s?-(?:\s?)([01]\d:[0-5][0-9]| 2[0-3]:[0-5][0-9])(?:\s?,\s?)+$
()
然后,抓取整个匹配项,然后按
,
,分割,难道你不能直接插入^
和$
,然后使用/…/.test(str)
?11:34-12:34,18:00-20:00应该是一个有效字符串,并生成两个匹配项['11:34-12:34','18:00-20:00']什么是无效字符串?不是一个或多个逗号分隔的时间范围11:34-12:34,18:00-20:00的字符串应该是有效字符串,并生成两个匹配项,在演示中它不会在此演示https://regex101.com/r/jZ3cZ5/2
可以匹配整个字符串,但匹配值仅为1,我建议按拆分字符串,
获取数组(如有必要)。匹配仅为一个,匹配的字符串仅为最后一个时间范围。我要寻找的是获取一个数组,其中每个时间范围作为该数组中的一个元素,如果字符串无效,则获取一个空数组。我意识到这可以通过字符串函数来实现。我只是想在单个regexIt中实现这一点,但仅仅使用regex是不可能的,您必须添加一个函数。此外,整个字符串匹配(请参见,它作为一个整体高亮显示),最后一个组仅显示在右侧,因为它已被重新写入(由于+
量词)。