我正在尝试找出正确的正则表达式来检测看起来像2d1h30m10s
的模式,其中任何模式都是有效的,例如1h
或1h30m
或{{1 }}或30m
或它们的任意组合。 regex是正确的工具吗?
我试图理解它,无论我做什么,我都会不断从这些不同的测试中得到10s
:
false
我在这里想念什么?
答案 0 :(得分:1)
您需要将regexp的每个部分设为可选,因此您可以省略该单元。
您需要从其他选择之一中选择[h]
,但您要匹配12h
,但不能匹配01h
。
结尾不应该有\d
。
您不允许单位或分钟的分钟数。也不需要60或60m,因为那是1m和1h。
/^((0?[1-9]|1[0-2])h)?([1-5]?[0-9]m)?([1-5]?[0-9]s)?$/
由于h
,m
和s
只是单个字符,因此无需将它们放在方括号内。
请注意,由于每个单元都是可选的,因此这还将匹配一个空字符串。您应与正则表达式分开检查。
答案 1 :(得分:0)
也许这会起作用
\d+\w+
如果我正确理解您要测试的字符串中包含数字后面的字符
答案 2 :(得分:0)
答案 3 :(得分:0)
我认为您要查找的表达式是:
/^((0?[1-9]|1[0-2])h)?((([0-5]?[0-9])|60)m)?((([0-5]?[0-9])|60)s)?$/
您的原始表达式有两个主要问题:1.末尾的\d
和2.捕获作用域(请注意表达式中的多余部分)。
这还将捕获:1h13s