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

Javascript 如何将有效整数和罗马数字与正则表达式匹配?,javascript,regex,Javascript,Regex,有一篇关于如何验证罗马数字的非常有用的文章 尽管我付出了所有的努力,Regex始终是我的致命弱点。如何扩展提供的正则表达式以匹配normal整数?提供的正则表达式是: /^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/ 假设您只需要正则形式的十进制整数(例如,1000将有效,1e3[科学记数法中的相同数字]将无效),则用于验证的正则表达式为\d+,表示“一个或多个数字” 要让正则表达式允许这样做,您需要一个替代,让两个替代匹配。

有一篇关于如何验证罗马数字的非常有用的文章

尽管我付出了所有的努力,Regex始终是我的致命弱点。如何扩展提供的正则表达式以匹配
normal
整数?提供的正则表达式是:

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

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

要让正则表达式允许这样做,您需要一个替代,让两个替代匹配。备选方案的形式为
first | second
,其中
first
second
是备选方案

由于当前表达式具有输入断言的“开始”和“结束”(
^
$
),因此我们希望将这些断言也包括在第二个备选方案中,或者将整个备选方案放在非捕获组中

因此,要么:

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

()


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

您能否进一步解释哪些类型的输入应该通过验证?阿拉伯数字能出现在罗马数字中吗?如果不是,那么@Wiktor的评论就可以了。@WiktorStribiżew:不是很好的复制品。@TimBiegeleisen:我知道我说的“正常”整数对不同的人可能意味着不同的东西。。。就我而言,我的意思是1,2,3,…@WiktorStribiżew:也许是为了你。但是可能不适用于OP.@JohnGathogo:这个例子很好(虽然有一个额外的
/
),但一般来说,在处理常量表达式时不要使用
新的RegExp
。使用
/…/
表示法,这样就不必担心两层反斜杠。(还有,我不太清楚你在说什么,Wiktor没有建议
/^\d+$/
)@Crowder:我知道整数对不同的人可能意味着不同的东西。。。在我的例子中,我的意思是1,2,3,…@JohnGathogo:只是为了解决问题而设计问题。有时人们也想处理科学记数法,这会使事情复杂一些。@Crowder:我明白。我的挑战一直是如何组合两个或多个正则表达式,使组合后的表达式具有预期的结果。这是我似乎从未掌握的东西。
    /^(?:M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})|\d+)$/
//    ^^^                                                      ^^^^^