Javascript 匹配regex或(pipe)子句中的两个精确字符

Javascript 匹配regex或(pipe)子句中的两个精确字符,javascript,regex,Javascript,Regex,我试图将速记符号解析为整数表示。这在小时、秒和分钟内都可以正常工作,但在毫秒内则不行,因为正则表达式无法匹配 匹配(/^(\d+)([MS | S | M | H | MS | S | M | H])$/) 我不知道该如何正确表达这个问题,但在这里提问之前,我做了几次搜索 如果需要匹配字符序列,则需要将defind与(…|…)构造一起使用 仅匹配其中定义的单个字符。看更多 您的正则表达式不能使用毫秒,因为您需要在数字后加1个字符,后跟字符串的结尾。因此,2个字母“ms”没有位置 因此,正确的方法

我试图将速记符号解析为整数表示。这在小时、秒和分钟内都可以正常工作,但在毫秒内则不行,因为正则表达式无法匹配

匹配(/^(\d+)([MS | S | M | H | MS | S | M | H])$/)

我不知道该如何正确表达这个问题,但在这里提问之前,我做了几次搜索

如果需要匹配字符序列,则需要将defind与
(…|…)
构造一起使用

仅匹配其中定义的单个字符。看更多

您的正则表达式不能使用毫秒,因为您需要在数字后加1个字符,后跟字符串的结尾。因此,2个字母“ms”没有位置

因此,正确的方法是使用

'50ms'.match(/^(\d+)(MS|S|M|H|ms|s|m|h)$/);
正如Tushar所建议的,您可以使用
/i
修饰符进一步压缩模式,并减少备选方案的数量

/^(\d+)(MS|ms|[SMH])$/i

参见

[MS | S | M | H | MS | S | M | H]
->
(MS | S | H | MS | S | M | H)
@wiktorstribiew。所有这些不同的正则表达式实现都快把我逼疯了。我发布了我的答案,解释了为什么你的正则表达式不工作。唯一使用括号对序列进行分组(不考虑排序规则)的regex风格是Perl6。其他人总是使用
(…)
@WiktorStribiżew哦,真的,不是开玩笑吧?我想让你把它作为一个答案发布,这样我就可以奖励你的努力。
/H |(M?S?)/i
只是比原来的正则表达式匹配得更多。如果应该匹配
12Ms
14mS
,则可以使用
/^(\d+)(H | M?S?$/i
。我猜,因为您没有在回答中包含它:)