Cod*_*316 3 javascript regex string palindrome
我想知道我的逻辑在哪里有缺陷.将string(str)作为参数(字符串可以是小写,大写,逗号和句点)并设置为等于var string.然后它被反转,如果它等于原始字符串,则返回值为true.如果不相等false则显示返回值.为什么评价一切都是真的?
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");
Run Code Online (Sandbox Code Playgroud)
tl; dr用.你的上一个正则表达式替换\.掉一个字符串.; 现在,你正在剥离所有角色.
在正则表达式中,.匹配任何字符(新行除外\n,至少默认情况下).所以,这段代码替换了任何字符:
replace(/./g , '')
Run Code Online (Sandbox Code Playgroud)
结果,你正在清空字符串.空字符串的反向是一个空字符串,因此您总是得到返回值true.
为了匹配文字时期,你必须.通过写作来逃避\..所以,将那部分改为
replace(/\./g , '')
Run Code Online (Sandbox Code Playgroud)
您也可以返回比较结果; 这里不需要if/ elseblock.这将使您的整个代码(格式化为可读性):
function palindrome(str) {
var string =str.toLowerCase()
.replace(/\s/g, '')
.replace(/,/g , '')
.replace(/\./g , '');
return string==string.split("").reverse().join("");
}
palindrome("nope");
Run Code Online (Sandbox Code Playgroud)
您可以更进一步,只删除所有非字母字符,这样您的代码可以更简单:
function palindrome(str) {
var string =str.toLowerCase().replace(/[^a-z]/g, '');
return string==string.split("").reverse().join("");
}
palindrome("nope");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73 次 |
| 最近记录: |