匹配正则表达式或(管道)子句中的两个确切字符

时间:2016-01-28 08:56:36

标签: javascript regex

我正在尝试将速记符号解析为整数表示。这适用于小时,秒和分钟,但不适用于毫秒,正则表达式无法匹配。

'50ms'.match(/^(\d+)([MS|S|M|H|ms|s|m|h])$/);

我不确定如何正确地表达问题,但在此之前我确实进行了几次搜索。

jsfiddle

1 个答案:

答案 0 :(得分:3)

如果您需要匹配字符的序列,则需要使用alternation groups defiend (...|...)构造。

character class仅匹配其中定义的单个字符。查看更多details on character class here

你的正则表达式不能用毫秒工作,因为在数字之后需要1个字符后跟字符串的结尾。因此,没有2个字母的地方" ms"。

所以,正确的方法是使用

'50ms'.match(/^(\d+)(MS|S|M|H|ms|s|m|h)$/);

正如Tushar建议的那样,您可以使用/i修饰符进一步缩小模式,并减少替代数量。

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

请参阅this demo