尝试检查回文。我检查了其他答案,但没有包含标点符号和空格。
“从不奇数或偶数”和“一个人,一个计划,一条运河。巴拿马”应该返回 true,但他们没有。
function palindrome(str) {
if(str.replace(/[^\w\s]|_/g, "").toLowerCase() === str.replace(/[^\w\s]|_/g, "").toLowerCase().split("").reverse().join("")){
return true;
} else {
return false;
}
}
palindrome("eye");
我认为您的正则表达式有错误。如果你想删除空格,你不需要那个
\s
。尝试改变:
str.replace(/[^\w\s]|_/g, "")
与
str.replace(/[^\w]|_/g, "")
改为使用:
str.replace(/\W/g, "")
这将用空字符串替换任何非单词字符。
您可以尝试使用更简单的正则表达式,它只需替换字母表中没有的任何字符?
function palindrome(str) {
if(str.replace(/[^a-zA-Z]/g, "").toLowerCase() === str.replace(/[^a-zA-Z]/g, "").toLowerCase().split("").reverse().join("")){
return true;
} else {
return false;
}
}
这与上面类似,但重新格式化:
function palindrome(str) {
let regex = /[^a-zA-Z]/g;
return str.replace(regex, '').toLowerCase() === str.replace(regex, '').toLowerCase().split('').reverse().join('');
}
要处理字符串中不均匀间隔的数字、标点符号和大写字母,您可以使用
let regex = /[^a-zA-Z0-9]/g;
return (
str.replace(regex, "").toLowerCase() ===
str.replace(regex, "").toLowerCase().split("").reverse().join("")
);