2015-11-20 126 views
0

我有一大堆的字符串相匹配的篝火:迴文中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

回答

1

最後一個不是迴文;你開始時有0_0,最後是0-0,並且不要擦除這些字符。作爲一個迂腐的筆記,嚴格地說,這不是一種常規的語言。

1

數組或字符串中的索引從0運行到length-1。但是當您訪問字符串末尾的元素時,您將從num開始,而不是num-1。從最後減去時需要減去額外的1。所以它應該是:

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

所以雖然答案是有用的,他們沒有提供正確的正則表達式。向@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");