提问者:小点点

JavaScript中的回文检查器-不知道如何调试


我想用javascript构建一个回文检查器。所有非字母字符都应该删除,这样像“一个人,一个计划,一条运河。巴拿马”这样的短语也可以是回文。

function reverse(str) {
  return str.split("").reverse().join("");
}


function palindrome(str) {
  str = str.replace(/[^a-zA-Z]+/,"").toLowerCase();
  if(str == reverse(str)) {
    return true;
  }
  else {
    return false;
  }
}

现在,上面几行的错误在哪里?

该代码适用于一些示例。但例如“一个人,一个计划,一条运河。巴拿马”和“从不奇数或偶数”返回false,这意味着某个地方一定是错误的。


共3个答案

匿名用户

您需要向正则表达式提供全局匹配标志:

/[^a-zA-Z]+/g
            ^

匿名用户

这是一个常见的误解。替换()方法不会替换字符串中要替换的所有实例。它只是替换第一个实例并停止。如果你像这样重构你的正则表达式:

function reverse(str) {
  return str.split("").reverse().join("");
}


function palindrome(str) {
    var find = "[^a-zA-Z]";
    var regEx = new RegExp(find, 'g');
  str = str.replace(regEx,"").toLowerCase();
  if(str == reverse(str)) {
    return true;
  }
  else {
    return false;
  }
}

这将工作。

匿名用户

从给出的例子来看,在我看来,代码不适用于字母之间的空格。(也可能有其他情况)

我改变了这一行:

str = str.replace(/[^a-zA-Z]+/,"").toLowerCase();

对这个:

str = str.toLowerCase().replace(/[^a-z]/g,"");