Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Regexp匹配时间范围_Javascript_Regex - Fatal编程技术网

Javascript Regexp匹配时间范围

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

我试图创建一个正则表达式,用于在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?)?)/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是不可能的,您必须添加一个函数。此外,整个字符串匹配(请参见,它作为一个整体高亮显示),最后一个组仅显示在右侧,因为它已被重新写入(由于
    +
    量词)。