判断字符串是否为回文
Determining if a string is a palindrome
我想知道我的逻辑哪里出了问题。将字符串 (str
) 作为参数(字符串可以是小写、大写、逗号和句点)并设置为等于 var string
。然后将其反转,如果它等于原始字符串,则 return 值为 true
。如果不相等,则显示 false
的 return 值。为什么它评估一切为真?
function palindrome(str) {
var string =str.toLowerCase().replace(/\s/g, '').replace(/,/g , '').replace(/./g , '');
if (string==string.split("").reverse().join("")) {
return true;
}
else{
return false;
}
}
palindrome("nope");
tl;dr 将上一个正则表达式中的 .
替换为 \.
以去除文字 .
s;现在,您要删除 所有 个字符。
问题
在正则表达式中,.
匹配任何字符(换行除外,\n
,至少在默认情况下是这样)。所以,这段代码替换了 any 字符:
replace(/./g , '')
因此,您正在清空字符串。空字符串的反面是一个空字符串,所以你总是得到一个 returned 值 true
.
解决方案
要匹配文字句点,您必须通过编写 \.
来转义 .
。所以,将该部分更改为
replace(/\./g , '')
一些重构让你的代码更棒
您也可以只return您比较的结果;这里不需要 if
/else
块。这将使您的整个代码(为便于阅读而格式化):
function palindrome(str) {
var string =str.toLowerCase()
.replace(/\s/g, '')
.replace(/,/g , '')
.replace(/\./g , '');
return string==string.split("").reverse().join("");
}
palindrome("nope");
您可以走得更远,只删除所有非字母字符,这样您的代码就可以更简单:
function palindrome(str) {
var string =str.toLowerCase().replace(/[^a-z]/g, '');
return string==string.split("").reverse().join("");
}
palindrome("nope");
我想知道我的逻辑哪里出了问题。将字符串 (str
) 作为参数(字符串可以是小写、大写、逗号和句点)并设置为等于 var string
。然后将其反转,如果它等于原始字符串,则 return 值为 true
。如果不相等,则显示 false
的 return 值。为什么它评估一切为真?
function palindrome(str) {
var string =str.toLowerCase().replace(/\s/g, '').replace(/,/g , '').replace(/./g , '');
if (string==string.split("").reverse().join("")) {
return true;
}
else{
return false;
}
}
palindrome("nope");
tl;dr 将上一个正则表达式中的 .
替换为 \.
以去除文字 .
s;现在,您要删除 所有 个字符。
问题
在正则表达式中,.
匹配任何字符(换行除外,\n
,至少在默认情况下是这样)。所以,这段代码替换了 any 字符:
replace(/./g , '')
因此,您正在清空字符串。空字符串的反面是一个空字符串,所以你总是得到一个 returned 值 true
.
解决方案
要匹配文字句点,您必须通过编写 \.
来转义 .
。所以,将该部分更改为
replace(/\./g , '')
一些重构让你的代码更棒
您也可以只return您比较的结果;这里不需要 if
/else
块。这将使您的整个代码(为便于阅读而格式化):
function palindrome(str) {
var string =str.toLowerCase()
.replace(/\s/g, '')
.replace(/,/g , '')
.replace(/\./g , '');
return string==string.split("").reverse().join("");
}
palindrome("nope");
您可以走得更远,只删除所有非字母字符,这样您的代码就可以更简单:
function palindrome(str) {
var string =str.toLowerCase().replace(/[^a-z]/g, '');
return string==string.split("").reverse().join("");
}
palindrome("nope");