我想在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;
}
}
那么,上面这些行的错误在哪里呢?
该代码适用于一些示例。但举个例子,“一个人,一个计划,一个运河。巴拿马”和“从不奇怪或偶数”都是假的,在某个地方的意思一定是错误的。
发布于 2015-09-04 10:06:11
您需要向正则表达式提供全局匹配标志:
/[^a-zA-Z]+/g
^发布于 2015-09-04 10:18:49
这是一个常见的误解。replace()方法并不替换要在字符串中替换的所有实例。它只需替换第一个实例并停止。如果您像这样重构您的regEx:
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;
}
}那就行了。
发布于 2015-09-04 10:23:13
从给出的例子来看,在我看来,代码并不适用于字母之间的空格。(可能还有其他情况)
我改变了这句话:
str = str.replace(/[^a-zA-Z]+/,"").toLowerCase();对此:
str = str.toLowerCase().replace(/[^a-z]/g,"");https://stackoverflow.com/questions/32395229
复制相似问题