正则表达式用于从自然语言字符串中提取时间

时间:2019-06-12 09:24:24

标签: javascript regex time

在我的逻辑中,我需要一个字符串var保留在数据库中,该字符串实际上是一种通过以下方式自定义toString变量的时间格式:

(days)d(hours)h(minutes)m

示例2天15小时半=> 2d15h30m

我想确保没有人在输入文本时期望提交该格式并给出另一种格式,我一直都很讨厌构建模式,正则表达式有人可以帮助我快速解决这个问题吗?

我已经尝试过自己:

([0-9]{1}|[0-9]{1}|[0-9]{1})d([0-1]{1}[0-9]{1}|20|21|22|23)h([0-5]{1}|[0-9]{1})m

但是它没有奏效,就像我每次尝试构建其中之一一样。

1 个答案:

答案 0 :(得分:0)

您可以使用

pattern="(?=[^1-9]*[1-9])\d+d(?:[10]?[0-9]|2[0-3])h[0-5]?\dm"

请参见regex demoregex graph

enter image description here

在HTML5 pattern属性正则表达式中,此模式将用于编译以下正则表达式:^(?:(?=[^1-9]*[1-9])\d+d(?:[10]?[0-9]|2[0-3])h[0-5]?\dm)$

它匹配

  • ^(?:-字符串的开头和未捕获的容器组的开头
  • (?=[^1-9]*[1-9])-正向超前查询,要求输入中至少包含一个非零数字
  • \d+d-1个以上的数字和后跟d个字符
  • (?:[10]?[0-9]|2[0-3])h-可选的10,后跟一个数字,或者2,后跟一个从03的数字,都跟着h
  • [0-5]?\dm-从05的可选数字,后跟任意数字和m
  • )$-容器组的结尾和字符串锚点的结尾。