如何将有效整数和罗马数字与正则表达式匹配?

时间:2016-08-29 07:26:17

标签: javascript regex

有一篇非常有用的文章介绍如何验证罗马数字How do you match only valid roman numerals with a regular expression?

尽管我付出了很多努力,但正则表达一直是我的致命弱点。如何扩展提供的正则表达式以匹配normal整数?提供的正则表达式为:

/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/

1 个答案:

答案 0 :(得分:3)

假设您只需要常规形式的十进制整数(例如,1000有效,1e3 [科学记数法中的相同数字]不会),正则表达式,用于验证\d+,表示"一个或多个数字。"

要让正则表达式允许,您需要替换,这可以让两个选项中的任何一个匹配。替代品的格式为first|second,其中firstsecond是替代品。

因为你当前的表达式有"开头"和"结束"在输入断言(^$)中,我们要么想要包含第二个备选方案中的那些,要么将整个交替置于非捕获组中。

所以:

    /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$|^\d+$/
// Note -----------------------------------------------------^^^^^^

on regex101

    /^(?:M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})|\d+)$/
//    ^^^                                                      ^^^^^

on regex101

请注意,您的原始表达式有一些捕获组(但不完全由捕获组成);如果你想捕获 \d+部分,你可以在其周围放置()