我需要编写一个带有参数str
的函数的代码,该函数评估该单词是否为回文,它应该返回true
,否则应返回false
注意:我需要删除所有非字母数字字符。
我编写了下面的代码,但它与预期的结果相反:
console.log
时。代码:
function palindrome(str) {
var exc = /[^\w_]/gi;
var repStr = str.toLowerCase().replace(exc, "");
console.log("Replaced string id: " + repStr);
len = repStr.length -1
for (var i = 0; i <= len; i++) {
if (str[i] !== repStr[len] - i) {
return false;
}
}
return true;
}
console.log(palindrome("eye"));
console.log(palindrome("_eye"));
console.log(palindrome("race car"));
console.log(palindrome("not a palindrome"));
console.log(palindrome("A man, a plan, a canal. Panama"));
console.log(palindrome("never odd or even"));
console.log(palindrome("nope"));
console.log(palindrome("almostomla"));
console.log(palindrome("My age is 0, 0 si ega ym"));
console.log(palindrome("1 eye for of 1 eye."));
console.log(palindrome("0_0 (: /-\ :) 0-0"));
console.log(palindrome("five|\_/|four"));
答案 0 :(得分:1)
您的代码中有2个错误。 1)RegExp没有替换下划线,因为[^\w_]
读取为&#34;所有不是单词字符或下划线&#34;。尝试
/[\W_]/g
读作&#34;以下之一:任何不是单词字符的字符,下划线&#34;
OR
/[^0-9a-z]/g
读作&#34;任何不是:数字(从0到9),英文字母&#34;。
2)要使它工作,你需要写
if(repStr[i] !== repStr[len - i])
而不是
if(str[i] !== repStr[len] - i)
答案 1 :(得分:0)
你可以简单地替换你的两行
for (var i = 0; i <= len; i++, len--) {
if (str[i] !== repStr[len]) {
检查这个
function palindrome(str) {
var exc = /[^\w_]/gi;
var repStr = str.toLowerCase().replace(exc, "");
console.log("Replaced string id: " + repStr);
len = repStr.length -1
for (var i = 0; i <= len; i++, len--) {
if (str[i] !== repStr[len]) {
return false;
}
}
return true;
}
console.log(palindrome("eye"));
console.log(palindrome("_eye"));
console.log(palindrome("race car"));
console.log(palindrome("not a palindrome"));
console.log(palindrome("A man, a plan, a canal. Panama"));
console.log(palindrome("never odd or even"));
console.log(palindrome("nope"));
console.log(palindrome("almostomla"));
console.log(palindrome("My age is 0, 0 si ega ym"));
console.log(palindrome("1 eye for of 1 eye."));
console.log(palindrome("0_0 (: /-\ :) 0-0"));
console.log(palindrome("five|\_/|four"));
&#13;
答案 2 :(得分:0)
试试这个:
function palindrome(str) {
const letters = str.replace(/[^a-z]/gi, ''); // replace any char that is not in the set [a-z] range
const lowercase = letters.toLowerCase();
const reversed = lowercase.split('').reverse().join('');
return lowercase === reversed;
}