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

match two exact characters in regex or (pipe) clause

本文关键字:字符 两个 子句 正则表达式 管道      更新时间:2023-09-26

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

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

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

斯菲德尔

如果需要匹配字符序列,则需要使用(...|...)构造的交替组。

字符类仅匹配其中定义的单个字符。在此处查看有关角色类的更多详细信息。

您的正则表达式不适用于毫秒,因为您需要在数字后立即跟字符串末尾的 1 个字符。因此,没有 2 个字母"ms"的位置。

所以,正确的方法是使用

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

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

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

查看此演示