javascript - 正则表达式匹配时间范围

标签 javascript regex

我正在尝试创建一个正则表达式来解析和验证 Javascript 中的时间范围。请记住,我只是想解析结构正确的字符串。随后进行有关时间范围的验证逻辑

要求:

  1. 时间元素始终以 24 小时表示,并且应为 (HH:mm) 格式。
  2. 时间范围定义为用破折号分隔的 2 个时间元素
  3. 字符串应至少有一个或多个以逗号分隔的时间范围
  4. 匹配模式应允许元素之间存在空格
  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?)?)/g

这似乎满足除规则 5 之外的所有规则。即。如果存在不正确的字符,它们根本不匹配,但表达式整体上不会失败

有什么方法可以将规则 5 嵌入到这个正则表达式中吗?

最佳答案

添加 anchor 以标记字符串的开头和结尾:

^((?:[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?)?)+$ ( demo )

然后,抓取整个匹配项,然后按 , 分割。

关于javascript - 正则表达式匹配时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29189181/

相关文章:

python - 从带有 unicode 字符的字符串创建正则表达式

正则表达式:找不到重复模式

regex - 使用正则表达式进行负向预测,以排除 Google Analytics 和 Google Search Console 中包含特定单词的短语

javascript - 当文本显示在浏览器页面上时,字符未转义

javascript - 如何在使用 webpack 编译期间将文件文本导入到 javascript 中的变量中?

javascript - 打开 jquery 模式对话框后 iframe 内容丢失

c++ - 如何为 cpp 中所有语言的整个单词匹配构建正则表达式?

python - 以任意顺序查找符号条目

javascript - 尝试在 ES6 中创建 angularJS 指令。尝试双向数据绑定(bind)时出错

JavaScript 检查元素是否为子元素