需要Javascript Caesars Cipher算法代码分解吗?

时间:2017-11-18 06:50:16

标签: javascript

我是一名freecodecamp露营者。我需要一个帮助来理解下面的代码如何工作,这是一个高级解决方案。



function rot13(str) { // LBH QVQ VG!
  str.replace(/[A-Z]/g, L => String.fromCharCode((L.charCodeAt(0) % 26) + 65));
}

// Change the inputs below to test
console.log(rot13("AAA !"));




我确实知道为什么我们使用模数26然后加65.但我不明白L =>实际上是在做。我也理解了一些正则表达式。请细分这段代码。

1 个答案:

答案 0 :(得分:2)

L =>声明arrow function,这是一种简写语法:

function(L) {
    return String.fromCharCode((L.charCodeAt(0) % 26) + 65));
}

当您在String.prototype.replace()中使用函数作为替换参数时,它会在正则表达式的每个匹配项上被调用,并且返回值将用作替换。

因此正则表达式匹配str中的每个大写字母。它调用该函数,该函数使用模数和加法计算新的字符代码,将其转换回字符,并且返回的字符成为替换字符。

但是,该功能不会像写的那样工作 - 它需要返回str.replace()的结果。



function rot13(str) { // LBH QVQ VG!
  return str.replace(/[A-Z]/g, L => String.fromCharCode((L.charCodeAt(0) % 26) + 65));
}

// Change the inputs below to test
console.log(rot13("ABMNTZ !"));