罗马数字生成器
Roman numerical generator
我试图在 Javascript 中想出一个罗马数字生成器,我在 Stack Overflow 上找到了它。我通过了所有测试,但我不知道它是如何工作的。如果能很好地描述这段代码中发生的事情,我将不胜感激:
let romanNumeralGenerator = (number) => {
return 'I'
.repeat(number)
.replace(/I{5}/g, 'V')
.replace(/V{2}/g, 'X')
.replace(/X{5}/g, 'L')
.replace(/L{2}/g, 'C')
.replace(/C{5}/g, 'D')
.replace(/D{2}/g, 'M')
.replace(/DC{4}/g, 'CM')
.replace(/C{4}/g, 'CD')
.replace(/LX{4}/g, 'XC')
.replace(/X{4}/g, 'XL')
.replace(/VI{4}/g, 'IX')
.replace(/I{4}/g, 'IV')
};
这实际上很容易解释。
方法romanNumeralGenerator()
接受一个数字作为参数,我们以数字10
为例。 repeat()
方法将重复出现指定次数的字符串,在我们的例子中是 10 次。因此,当数字 10
传递给我们的函数时,它将重复 I
10 次,从而创建字符串 IIIIIIIIII
.
然后函数获取结果字符串并根据匹配的正则表达式执行 replace
方法。在我们的例子中,它将命中第一个正则表达式并看到我们至少有 5 个重复 I's
,因此它将把它们转换成 V
给我们字符串 VIIIII
。它将识别另一个包含 5 个重复 I's
的字符串,并将它们转换为 V
以及字符串 VV
。之后它将匹配第二个正则表达式并注意到存在 2 V's
,这会将字符串转换为 X
,为我们传递的数字 10
提供正确的罗马数字进入功能。希望这会有所帮助。
我试图在 Javascript 中想出一个罗马数字生成器,我在 Stack Overflow 上找到了它。我通过了所有测试,但我不知道它是如何工作的。如果能很好地描述这段代码中发生的事情,我将不胜感激:
let romanNumeralGenerator = (number) => {
return 'I'
.repeat(number)
.replace(/I{5}/g, 'V')
.replace(/V{2}/g, 'X')
.replace(/X{5}/g, 'L')
.replace(/L{2}/g, 'C')
.replace(/C{5}/g, 'D')
.replace(/D{2}/g, 'M')
.replace(/DC{4}/g, 'CM')
.replace(/C{4}/g, 'CD')
.replace(/LX{4}/g, 'XC')
.replace(/X{4}/g, 'XL')
.replace(/VI{4}/g, 'IX')
.replace(/I{4}/g, 'IV')
};
这实际上很容易解释。
方法romanNumeralGenerator()
接受一个数字作为参数,我们以数字10
为例。 repeat()
方法将重复出现指定次数的字符串,在我们的例子中是 10 次。因此,当数字 10
传递给我们的函数时,它将重复 I
10 次,从而创建字符串 IIIIIIIIII
.
然后函数获取结果字符串并根据匹配的正则表达式执行 replace
方法。在我们的例子中,它将命中第一个正则表达式并看到我们至少有 5 个重复 I's
,因此它将把它们转换成 V
给我们字符串 VIIIII
。它将识别另一个包含 5 个重复 I's
的字符串,并将它们转换为 V
以及字符串 VV
。之后它将匹配第二个正则表达式并注意到存在 2 V's
,这会将字符串转换为 X
,为我们传递的数字 10
提供正确的罗马数字进入功能。希望这会有所帮助。