function palindrome(str) {
// Good luck!
var a = str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "").toLowerCase();
if (a === a.split("").reverse().join("")) {
return true;
}
return false;
}
palindrome("eye");
palindrome("1 eye for of 1 eye.") //should return false.
我在freecodecampus.com上完成了这项任务。谁能告诉我为什么它应该给出错误?如果我们要删除点和标点符号,那么它应该返回true是不正确的?
答案 0 :(得分:1)
function palindrome(str) {
// Good luck!
var a = str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "").toLowerCase();
// Here print a
// a = "eyeforofeye"; which is perfect palindrome
if (a === a.split("").reverse().join("")) {
// will pass this condition
return true;
}
return false;
}
palindrome("1 eye for of 1 eye.")
在代码中查看我的评论。 replace
方法使用正则表达式替换所有数字,特殊字符和空格。所以你得到的只是一个单词,没有空格,数字和特殊字符。
在你的情况下,你会得到eyeforofeye
,这是完美的回文。
答案 1 :(得分:1)
您正在通过提供过于复杂的正则表达式来执行Rube Goldberg流程,该表达式可缩短为/[^a-z]/
,如果您执行代码,则不会返回false
。
function palindrome(str) {
var a = str.replace(/[^a-z]/ig, '').toLowerCase();
return a === a.split('').reverse().join('');
}
console.log(palindrome('race CAR'));
console.log(palindrome('2A3 3a2'));
console.log(palindrome('eye'));
console.log(palindrome('1 eye for of 1 eye.'));
console.log(palindrome('stack'));
答案 2 :(得分:1)
根据您的评论"注意您需要删除所有非字母数字字符(标点符号,空格和符号)" ,您必须保留字母数字字符(即字母和数字)。因此,删除NON alphanum字符(即[\W_]
)。 \W
是对\w
:[^a-zA-Z0-9_]
这是通过以下方式完成的:
var test = [
"racecar",
"RaceCar",
"race CAR",
"2A3*3a2",
"2A3 3a2",
"2_A3*3#A2",
"1 eye for of 1 eye."
];
function palindrome(str) {
var a = str.replace(/[\W_]+/g, "").toLowerCase();
if (a === a.split("").reverse().join("")) {
return true;
}
return false;
}
console.log(test.map(function (a) {
return a+' : '+palindrome(a);
}));

答案 3 :(得分:0)
非常感谢大家,已经做到了;还有关于RegeXes的一些很好的信息。从Eloquent Javascript读取RegEx,有人可以建议另一个更好的来源吗? Thanx领先 顺便说一句,作为答案,它采取了这一点,(对那些对通过项目中的所有标记感兴趣的人有兴趣),
function palindrome(str) {
// Good luck!
var a = str.replace(/[^a-z0-9]/ig, "").toLowerCase();
if (a === a.split("").reverse().join("")) {
return true;
}
return false;
}
palindrome("eye");