我是一名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 =>实际上是在做。我也理解了一些正则表达式。请细分这段代码。
答案 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 !"));