Javascript-如何检查正则表达式以确保字符串至少包含一个字母/数字序列?

Javascript-如何检查正则表达式以确保字符串至少包含一个字母/数字序列?,javascript,regex,Javascript,Regex,我试图找出正确的正则表达式来检测一个模式,该模式看起来像2d1h30m10s,其中任何一个都是有效的,例如1h或1h30m或10s或它们的任意组合。正则表达式是这里的正确工具吗 我正在努力理解它,无论我做什么,我总是从这些不同的测试中得到false: /^(0?[1-9]|1[0-2][h])([1-6][0-9][m])([1-6][0-9][s])\d$/.test('2d1h10m10s') /^(0?[1-9]|1[0-2][h])([1-6][0-9][m])([1-6][0-9][s

我试图找出正确的正则表达式来检测一个模式,该模式看起来像
2d1h30m10s
,其中任何一个都是有效的,例如
1h
1h30m
10s
或它们的任意组合。正则表达式是这里的正确工具吗

我正在努力理解它,无论我做什么,我总是从这些不同的测试中得到
false

/^(0?[1-9]|1[0-2][h])([1-6][0-9][m])([1-6][0-9][s])\d$/.test('2d1h10m10s')
/^(0?[1-9]|1[0-2][h])([1-6][0-9][m])([1-6][0-9][s])\d$/.test('10m10s')
/^(0?[1-9]|1[0-2][h])([1-6][0-9][m])([1-6][0-9][s])\d$/.test('10s')

我在这里遗漏了什么?

也许这个会有用

\d+\w+

如果我正确地理解您正在尝试测试一个字符串,该字符串包含数字后面的字符,那么需要将regexp的每个部分都设置为可选,这样您就可以省略该单元

您需要从一个备选方案中选择
[h]
——您匹配
12h
,但不匹配
01h

您不应该在末尾添加
\d

你不允许一位数的分或秒。也不需要60秒或60米,因为这是1米和1小时

/^((0?[1-9]|1[0-2])h)?([1-5]?[0-9]m)?([1-5]?[0-9]s)?$/

无需将
h
m
s
放在方括号内,因为它们只是单个字符

请注意,由于每个单元都是可选的,因此也将匹配一个空字符串。您应该在regexp中单独检查此项。

请尝试:

^(\d{0,2}[hms]){0,3}$
示例:

我想你想要的表达方式是:

/^((0?[1-9]|1[0-2])h)?((([0-5]?[0-9])|60)m)?((([0-5]?[0-9])|60)s)?$/
原始表达式有两个主要问题:1。末尾的
\d
,以及2。捕获范围(注意我表达式中的额外参数)


这还将捕获:1h13s

两个问题:
1[0-2][h]
需要两个小时的数字,并且尾随的
\d$
与任何输入都不匹配(您需要在每个测试的字符串中都有尾随数字)。您所有的模式都以
\d
结尾,但没有一个字符串以数字结尾。哇,这太神奇了!非常感谢你在这方面的帮助。我对Regex还是新手,所以这非常有用:)如果这个例子是
5m5s
?谢谢,解决了这个问题。太棒了:)我一直在修修补补,可能需要第四个,比如
1d20h30m10s
,我试过这样的:
/^([1-9]?[1-9])d)([1-9]?[1-9]?[1-9]?[1-9]?[1-9])h)([1-5]?[0-9]m) ([1-5]?[0-9]s)$/
它没有给我想要的结果吗?它应该是
([1-9]?[0-9]d)
,所以你匹配
10d
。您还更改了我答案中的
h
部分。