罗马数字生成器

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 提供正确的罗马数字进入功能。希望这会有所帮助。