首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript中的回文检查器-不知道如何调试

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

Stack Overflow用户
提问于 2015-09-04 09:59:55
回答 4查看 1.6K关注 0票数 4

我想在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;
  }
}

那么,上面这些行的错误在哪里呢?

该代码适用于一些示例。但举个例子,“一个人,一个计划,一个运河。巴拿马”和“从不奇怪或偶数”都是假的,在某个地方的意思一定是错误的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-09-04 10:06:11

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

代码语言:javascript
复制
/[^a-zA-Z]+/g
            ^
票数 5
EN

Stack Overflow用户

发布于 2015-09-04 10:18:49

这是一个常见的误解。replace()方法并不替换要在字符串中替换的所有实例。它只需替换第一个实例并停止。如果您像这样重构您的regEx:

代码语言:javascript
复制
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;
  }
}

那就行了。

票数 1
EN

Stack Overflow用户

发布于 2015-09-04 10:23:13

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

我改变了这句话:

代码语言:javascript
复制
str = str.replace(/[^a-zA-Z]+/,"").toLowerCase();

对此:

代码语言:javascript
复制
str = str.toLowerCase().replace(/[^a-z]/g,"");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32395229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档