2016-07-31 122 views
0

我想創建一個正則表達式來查找任何不是字母的東西,而且我還想檢測字符串中的任何空格。我查看了MDN文檔,YouTube視頻和stackoverflow問題,但我仍然不明白。你能指出我正確的方向嗎?這裏是的jsfiddle(它是迴文的功能。):https://jsfiddle.net/jn2tutty/71/正則表達式/ javascript

這裏是代碼:

var regexp = /[^A-Za-z]|\s+|/g;

+0

空格字符不是字母,所以不需要單獨測試它們。 – nnnnnn

回答

0

您正則表達式是正確的。您的代碼/小提琴不起作用,因爲琴絃有不同的外殼(Racecar vs racecar)。

如果您還轉換nospace變量爲小寫字母,它的工作原理:

function palindrome(str) { 
    // Good luck! 
    var nospace = str.replace(" ", "").toLowerCase(); 
           // ^^^^^^^^^^^^^^--- added this 
    var reverse = str.split('').reverse().join(''); 
    var change = reverse.toLowerCase(); 
    console.log(change); 
    var regexp = /[^A-Za-z]|\s+/g; 

    var x = change.replace(regexp, ""); 

    if (nospace == x) { 
    return true; 
    } else { 
    return false; 
    } 
} 
console.log(palindrome("Race car")); 

updated fiddle here


現在,您的代碼可以使用其他一些改進。

正則表達式「去掉所有不是字母的東西」正則表達式(/[^A-Za-z]|\s+/g)可以簡化爲/[^A-Za-z]/g。但你可能根本不需要它(我不知道你的要求,如果你的要求真的希望你刪除非字母,而不僅僅是空格),你可能仍然需要它。

您的第一個nospace var只會替換輸入中的第一個空格。使用正則表達式可以替代所有這些(如果這真的是你想要的,只能這樣做):str.replace(" ", "")變成str.replace(/\s+/g, "")。另外,由於您已經刪除了nospace中的空格,因此您可以將其反轉(而不是反轉輸入並稍後刪除其空格)。然後比較它。

此外,最後的if/else可以簡化爲return陳述。最終代碼如下所示:

function palindrome(str) { 
    var nospace = str.replace(/\s+/g, "").toLowerCase(); 
    var reverse = nospace.split('').reverse().join('').toLowerCase().replace(/[^a-z]/g, ""); 
    //   optional, depends on your requirements -------------^^^^^^^^^^^^^^^^^^^^^^^^ 
    return nospace === reverse; 
} 
console.log(palindrome("R a c e c a r")); // output: true 

JSFiddle here

+0

是的,好點。我正在考慮用那句話更新答案。我想我現在會,謝謝! – acdcjunior

+0

非常感謝。這非常有幫助。我仍在學習 :) –

1

該方法丟棄除了字母之外的所有內容,並使用for循環來反轉字符串。

var str = ' some123 text -&'; 
str = str.replace(/[^a-z]/gi,'').toLowerCase(); 
console.log(str); 
var i,reversed = ''; 
for (i = str.length-1; i > -1; i--) { 
     reversed += str[i]; 
} 
if (str === reversed) { 
     console.log('palindrome'); 
} else { 
     console.log('not a palindrome'); 
}