【发布时间】:2017-09-18 09:43:44
【问题描述】:
我被要求检查一个字符串是否是回文。 不区分大小写。忽略所有不是字母的字符。
我的答案
function palindrome(str) {
var oldStr = str.toLowerCase().replace(/\s+|\,|\.|\_|\-|\:|\(|\)|\/|\\/g, '');
var newStr = str.replace(/\s+|\,|\.|\_|\-|\:|\(|\)|\/|\\/g, '').split("").reverse().join("").toLowerCase();
if ( oldStr === newStr){
return true;
}
else {
return false;
}
}
palindrome("ininiNI");
该函数将检查任何字符串的可能性。 例子: ("0_0 (: /-\ :) 0-0") 根据要求应该返回true。
我在 JavaScript 中找不到比上述更好的解决方案。
有没有比写出每个可能的要删除/替换的字符更快/更好的方法? (尤其是因为我写的内容远非详尽……)
【问题讨论】:
-
错误的重复链接,链接有Java解决方案。这是我搜索的一个JS解决方案:stackoverflow.com/questions/9364400/…
-
正则表达式 \W 带走了大部分选项,但不是全部。 palindrome("_eye") 仍然没有返回 True。我上面给出的字符串示例也没有。
-
@Doomenik 好的,谢谢,这个答案总结了它。我还需要加 _ 来去掉下划线。
-
@Chuck 你可以使用这个正则表达式:
/[^a-z]/ig -
刚试过,效果很好。我在哪里可以找到关于 [^A-Za-z0-9] 的确切含义/作用的解释...?
标签: javascript regex string replace palindrome