Javascript 替换字符串时出错
Javascript error when replacing strings
我正在尝试 Javascript codewars 关于替换字符串的挑战。
说明是:您的任务:
你必须创建一个函数 GrεεκL33t 其中
将字符串作为输入,并以 returns 的形式
(L33T+Grεεκ) 案例。
注意:未转换的字母
(L33T+Grεεκ) 返回小写字母。
(L33T+Grεεκ)Case:
A=α (Alpha) B=β (Beta) D=δ (Delta)
E=ε (Epsilon) I=ι (Iota) K=κ (Kappa)
N=η (Eta) O=θ (Theta) P=ρ (Rho)
R=π (Pi) T=τ (Tau) U=μ (Mu)
V=υ (Upsilon) W=ω (Omega) X=χ (Chi)
Y=γ (Gamma)
Examples:
GrεεκL33t("CodeWars") = "cθδεωαπs"
GrεεκL33t("Kata") = "κατα"
我认为问题在于,当我复制网页上提供的希腊字符时,codewars 无法识别它们,它的计算结果为:
Expected: cθδεωαπs, instead got: cundefinedundefinedundefinedundefinedundefinedundefineds
我的解决方案如下,有人知道如何让它工作吗?
function GrεεκL33t(str){
var mapObj = {
A:"α", B:"β", D:"δ",E:"ε", I:"ι", K:"κ",
N:"η", O:"θ", P:"ρ", R:"π", T:'τ', U:'μ',
V:'υ', W:'ω', X:'χ', Y:'γ'
};
str = str.replace(/A|B|D|E|I|K|N|O|P|R|T|U|V|W|X|Y/gi, function(matched){
return mapObj[matched];
});
return str;
}
既然已经有了钥匙,为什么还要进行所有复杂的替换和匹配操作。
做这样的事情:
function Gr(str) {
var mapObj = {
A: "α",
B: "β",
D: "δ",
E: "ε",
I: "ι",
K: "κ",
N: "η",
O: "θ",
P: "ρ",
R: "π",
T: 'τ',
U: 'μ',
V: 'υ',
W: 'ω',
X: 'χ',
Y: 'γ'
};
var rebuildString="";
for (i=0; i<str.length; i++){
rebuildString += mapObj[str.charAt(i)];
console.log(rebuildString);
}
return rebuildString;
}
Gr("ABD");
编辑
这应该可以正常工作。我没有时间包括小写情况,但你会明白的。
您的正则表达式匹配小写字母,尽管它不区分大小写。要修复它,请使用 str.toUpperCase()
:
str = str.replace(/A|B|D|E|I|K|N|O|P|R|T|U|V|W|X|Y/gi, function(matched){
return mapObj[matched.toUpperCase()];
});
您当前的解决方案只需进行一些调整即可使用(并不是说没有更好的解决方案):
function GrεεκL33t(str){
var mapObj = {
a:"α", b:"β", d:"δ",e:"ε", i:"ι", k:"κ",
n:"η", o:"θ", p:"ρ", r:"π", t:'τ', u:'μ',
v:'υ', w:'ω', x:'χ', y:'γ'
};
str = str.toLowerCase().replace(/A|B|D|E|I|K|N|O|P|R|T|U|V|W|X|Y/gi, function(matched){
return mapObj[matched];
});
return str;
}
alert(GrεεκL33t("Codewars"));
你有两个问题。首先,您忽略了不匹配字符以小写形式返回的要求。通过使用 toLowerCase
我们解决了这个问题。第二个问题是你的 mapObj
的键都是大写的,但在 Codewars
的情况下你传递的是小写字符。 Javascript 区分大小写。 mapObj["A"]
与 mapObj["a"]
不同。由于我们只是将整个字符串小写,我只是将 mapObj
中的键也更改为小写(或者,如果你 真的,真的 想要,你可以 matched.toUpperCase()
保持按键大写)。
我正在尝试 Javascript codewars 关于替换字符串的挑战。
说明是:您的任务:
你必须创建一个函数 GrεεκL33t 其中
将字符串作为输入,并以 returns 的形式
(L33T+Grεεκ) 案例。
注意:未转换的字母
(L33T+Grεεκ) 返回小写字母。
(L33T+Grεεκ)Case:
A=α (Alpha) B=β (Beta) D=δ (Delta)
E=ε (Epsilon) I=ι (Iota) K=κ (Kappa)
N=η (Eta) O=θ (Theta) P=ρ (Rho)
R=π (Pi) T=τ (Tau) U=μ (Mu)
V=υ (Upsilon) W=ω (Omega) X=χ (Chi)
Y=γ (Gamma)
Examples:
GrεεκL33t("CodeWars") = "cθδεωαπs"
GrεεκL33t("Kata") = "κατα"
我认为问题在于,当我复制网页上提供的希腊字符时,codewars 无法识别它们,它的计算结果为:
Expected: cθδεωαπs, instead got: cundefinedundefinedundefinedundefinedundefinedundefineds
我的解决方案如下,有人知道如何让它工作吗?
function GrεεκL33t(str){
var mapObj = {
A:"α", B:"β", D:"δ",E:"ε", I:"ι", K:"κ",
N:"η", O:"θ", P:"ρ", R:"π", T:'τ', U:'μ',
V:'υ', W:'ω', X:'χ', Y:'γ'
};
str = str.replace(/A|B|D|E|I|K|N|O|P|R|T|U|V|W|X|Y/gi, function(matched){
return mapObj[matched];
});
return str;
}
既然已经有了钥匙,为什么还要进行所有复杂的替换和匹配操作。 做这样的事情:
function Gr(str) {
var mapObj = {
A: "α",
B: "β",
D: "δ",
E: "ε",
I: "ι",
K: "κ",
N: "η",
O: "θ",
P: "ρ",
R: "π",
T: 'τ',
U: 'μ',
V: 'υ',
W: 'ω',
X: 'χ',
Y: 'γ'
};
var rebuildString="";
for (i=0; i<str.length; i++){
rebuildString += mapObj[str.charAt(i)];
console.log(rebuildString);
}
return rebuildString;
}
Gr("ABD");
编辑
这应该可以正常工作。我没有时间包括小写情况,但你会明白的。
您的正则表达式匹配小写字母,尽管它不区分大小写。要修复它,请使用 str.toUpperCase()
:
str = str.replace(/A|B|D|E|I|K|N|O|P|R|T|U|V|W|X|Y/gi, function(matched){
return mapObj[matched.toUpperCase()];
});
您当前的解决方案只需进行一些调整即可使用(并不是说没有更好的解决方案):
function GrεεκL33t(str){
var mapObj = {
a:"α", b:"β", d:"δ",e:"ε", i:"ι", k:"κ",
n:"η", o:"θ", p:"ρ", r:"π", t:'τ', u:'μ',
v:'υ', w:'ω', x:'χ', y:'γ'
};
str = str.toLowerCase().replace(/A|B|D|E|I|K|N|O|P|R|T|U|V|W|X|Y/gi, function(matched){
return mapObj[matched];
});
return str;
}
alert(GrεεκL33t("Codewars"));
你有两个问题。首先,您忽略了不匹配字符以小写形式返回的要求。通过使用 toLowerCase
我们解决了这个问题。第二个问题是你的 mapObj
的键都是大写的,但在 Codewars
的情况下你传递的是小写字符。 Javascript 区分大小写。 mapObj["A"]
与 mapObj["a"]
不同。由于我们只是将整个字符串小写,我只是将 mapObj
中的键也更改为小写(或者,如果你 真的,真的 想要,你可以 matched.toUpperCase()
保持按键大写)。