2016-12-17 36 views
-1

我正在開發FreeCodeCamp前端開發認證,並已到達基本算法腳本部分。其中一個練習是編寫一個測試迴文的代碼。我理解了要做的所有事情(已經差不多),很快就寫了我的代碼,但不明白爲什麼它沒有給出包含下劃線(_)的字符串的正確結果。這裏是我的代碼:爲什麼我的JS代碼不能從字符串中過濾掉這個「_」元素?

function palindrome(str) { 
    str = str.replace(/\W/g,''); 
    if ((((str.toLowerCase()).split("")).reverse()).join("") == str.toLowerCase()){ 
     return true; 
    } 
    else { 
     return false; 
    } 
} 
palindrome("_eye"); 
+1

你認爲你的代碼的一部分*應*過濾掉下劃線? – Dekel

+0

這個'(/ \ W/g,'')'部分,或者我想。不過沒關係。我已經有了解決方案。 –

回答

1

\W在正則表達式基本上是寫一個短的路「天天聊是任何[a-zA-Z0-9_]字符的」。
正如你所見 - 數字和下劃線也是其中的一部分。

如果您刪除每個字符不是[a-zA-Z]你可以用/[^a-zA-Z]/代替:

function palindrome(str) { 
 
    str = str.replace(/[^a-zA-Z]/g,''); 
 
    if ((((str.toLowerCase()).split("")).reverse()).join("") == str.toLowerCase()){ 
 
     return true; 
 
    } 
 
    else { 
 
     return false; 
 
    } 
 
} 
 
console.log(palindrome("_eye"))

+0

如果downvoter會對投票結果發表評論,我們將不勝感激。 – Dekel

0

只要改變YOUT正則表達式來str.replace(/[\W_]/g,'');

+0

這隻會抑制給定字符串中的所有字母和數字! (所以在大多數情況下,任何條目都返回「true」) – cFreed

+0

是的,看到了錯誤。 – Tyr

+0

cFreed是正確的。我已經嘗試過,但只會導致幾乎所有情況都返回「真」。另一個海報的解決方案,稍微調整,以排除數字元素被過濾出來,工作。儘管如此,謝謝大家。 –

相關問題