javascript - 判断字符串是否为回文

标签 javascript regex string palindrome

我想知道我的逻辑哪里出了问题。字符串 (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");

最佳答案

tl;dr 将上一个正则表达式中的 . 替换为 \. 以去除文字 . ;现在,您要删除所有 个字符。

问题

在正则表达式中,. 匹配任何字符(换行符除外,\n,至少在默认情况下是这样)。所以,这段代码替换了任何字符:

replace(/./g , '')

因此,您正在清空字符串。空字符串的反面是一个空字符串,因此您总是得到 true 的返回值。

解决方案

要匹配文字句点,您必须通过编写 \. 来转义 .。因此,将该部分更改为

replace(/\./g , '')

一些重构让你的代码更棒

你也可以只返回你比较的结果;这里不需要 if/else block 。这将使您的整个代码(为便于阅读而格式化):

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");

关于javascript - 判断字符串是否为回文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367998/

相关文章:

javascript - Three.js TrackballControls.js 仅在 z 轴和 x 轴上旋转

regex - 如何使用 golang 进行字符串替换

Javascript 正则表达式替换页面上所有链接 href 中的符号

javascript - Spring MVC : Need elegant solution to handle escaping and unescaping of strings passed into Front End

javascript - Angular - 如何通过 $scope 中的函数更改 $scope 属性值

javascript - jQuery 在链接上单击提交表单

python - 用 python 正则表达式替换多行

python 3 字符串格式化(对齐)

java - 在 Java 中从串行端口分割字符串

php - 检查字符串名称中的点