我有这个字符串 '=F*G'
我想将其替换为数字 '=6*7'
我已经成功地使用此代码成功地用数字替换了字母
var string = '=F*G'
.toLowerCase().split('')
.filter(c => c >= 'a' & c <= 'z')
.map(c => c.charCodeAt(0) - 'a'.charCodeAt(0) + 1)
.join(' ')
console.log(string);
但此代码删除了“=”和“*” 用数字替换字母后,我需要帮助将它们保持在字符串中
答案 0 :(得分:2)
您可以将 String#replace
与回调替换函数一起使用。这个替换函数可以使用 String#charCodeAt()
为字符串中的每个字母字符生成一个序数值。
console.log("=F*G".replace(/[A-Z]/g, m => m.charCodeAt() - 64));
如果您想匹配两种情况并为每个大写/小写字母生成不同的数字,请使用 [a-zA-Z]
或 i
标志。如果您想对两种情况进行归一化以生成相同的数字,请在应用上面提供的代码之前先调用 String#toUpperCase()
(或在您执行时使用 toLowerCase()
并相应地更改序数减法值 - 它不会没关系)。
答案 1 :(得分:1)
您不能过滤字符,否则它们不会在输出中合并在一起。试试这个。
var string = '=F*G'
.toLowerCase().split('')
.map(c => {
if (c >= 'a' && c <= 'z') {
return c.charCodeAt(0) - 'a'.charCodeAt(0) + 1
}
return c;
})
.join('')
console.log(string);