回文正则表达式

时间:2017-06-23 11:50:22

标签: javascript regex

     function palindrome(str) {  
        // Good luck!  
        var a = str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "").toLowerCase();   
           if (a === a.split("").reverse().join("")) {  
        return true;  
        }   
        return false;  
       }   

 palindrome("eye");  

 palindrome("1 eye for of 1 eye.") //should return false.

我在freecodecampus.com上完成了这项任务。谁能告诉我为什么它应该给出错误?如果我们要删除点和标点符号,那么它应该返回true是不正确的?

4 个答案:

答案 0 :(得分:1)

function palindrome(str) {
   // Good luck!
  var a = str.replace(/\s|[0-9_]|\W|[#$%^&*()]/g, "").toLowerCase();
  // Here print a 
  // a = "eyeforofeye"; which is perfect palindrome
   if (a === a.split("").reverse().join("")) {
  // will pass this condition
   return true;
   }
   return false;
  }

 palindrome("1 eye for of 1 eye.") 

在代码中查看我的评论。 replace方法使用正则表达式替换所有数字,特殊字符和空格。所以你得到的只是一个单词,没有空格,数字和特殊字符。

在你的情况下,你会得到eyeforofeye,这是完美的回文。

答案 1 :(得分:1)

您正在通过提供过于复杂的正则表达式来执行Rube Goldberg流程,该表达式可缩短为/[^a-z]/,如果您执行代码,则不会返回false

function palindrome(str) {  
    var a = str.replace(/[^a-z]/ig, '').toLowerCase();
    return a === a.split('').reverse().join('');
}

console.log(palindrome('race CAR'));
console.log(palindrome('2A3 3a2'));
console.log(palindrome('eye'));
console.log(palindrome('1 eye for of 1 eye.'));
console.log(palindrome('stack'));

答案 2 :(得分:1)

根据您的评论"注意您需要删除所有非字母数字字符(标点符号,空格和符号)" ,您必须保留字母数字字符(即字母和数字)。因此,删除NON alphanum字符(即[\W_])。 \W是对\w[^a-zA-Z0-9_]

的否定

这是通过以下方式完成的:



var test = [
    "racecar", 
    "RaceCar", 
    "race CAR",
    "2A3*3a2", 
    "2A3 3a2", 
    "2_A3*3#A2",
    "1 eye for of 1 eye."
];
function palindrome(str) {  
    var a = str.replace(/[\W_]+/g, "").toLowerCase();   
    if (a === a.split("").reverse().join("")) {  
        return true;  
    }   
    return false;  
}   
console.log(test.map(function (a) {
  return a+' : '+palindrome(a);
}));




答案 3 :(得分:0)

非常感谢大家,已经做到了;还有关于RegeXes的一些很好的信息。从Eloquent Javascript读取RegEx,有人可以建议另一个更好的来源吗? Thanx领先 顺便说一句,作为答案,它采取了这一点,(对那些对通过项目中的所有标记感兴趣的人有兴趣),

function palindrome(str) {
          // Good luck!
          var a = str.replace(/[^a-z0-9]/ig, "").toLowerCase();
          if (a === a.split("").reverse().join("")) {
          return true;
          }
          return false;
          }

          palindrome("eye");