如何使用正则表达式匹配多个字符串?

问题描述:

我有一大堆的字符串相匹配的篝火:回文中FreeCodeCamp 字符串是:如何使用正则表达式匹配多个字符串?

  • 赛车
  • 不是一个回文
  • 一个男人,一个计划,一个运河。*
  • 没了
  • almostomla
  • 我的年龄是0,0 SI EGA YM。
  • 1只眼的1只眼。
  • 0_0(/ - \ :) 0-0

我的代码:

function palindrome(str) { 


    var newstr = str.replace(/[^\w_-]/g,"").toLowerCase(); 
    var num = newstr.length; 
    for(var i=0;i<=Math.floor(num/2);i++) 
    { 
     if(newstr[i]!==newstr[num-i]) 
     { 

      return newstr; 

     } 
    } 

    return true; 
} 

什么能if语句是错误的?字符串的返回是好的..只是不能把我的头围绕这些正则表达式?

我现在的正则表达式:

var newstr = str.replace(/[^\w_-]/g,"").toLowerCase(); 

匹配几乎所有的字符串,但最后一个。我哪里错了?

+1

下划线包含在'\ w',你不需要列出单独的正则表达式。 – Barmar

+1

您正在字符串之外访问。当'i'为零时,将它与'newstr [num]'进行比较,但最高索引是'newstr [num-1]'。 – Barmar

最后一个不是回文;你开始时有0_0,最后是0-0,并且不要擦除这些字符。作为一个迂腐的笔记,严格地说,这不是一种常规的语言。

数组或字符串中的索引从0运行到length-1。但是当您访问字符串末尾的元素时,您将从num开始,而不是num-1。从最后减去时需要减去额外的1。所以它应该是:

if (newstr[i] != newstr[num-i-1]) { 
    return newstr; 
} 

所以虽然答案是有用的,他们没有提供正确的正则表达式。向@Barmar发出指出正确的方向。这是我的正则表达式。

var newstr = str.replace(/[\W_]/g,'').toLowerCase(); 

为回文在FCC的完整代码:

function palindrome(str) { 


    var newstr = str.replace(/[\W_]/g,'').toLowerCase(); 
    var num = newstr.length; 
    for(var i=0;i<=Math.floor(num/2);i++) 
    { 
     if(newstr[i]!==newstr[num-1-i]) 
     { 

      return false; 

     } 
    } 

    return true; 
} 



palindrome("0_0 (: /-\ :) 0-0");