我想創建一個正則表達式來查找任何不是字母的東西,而且我還想檢測字符串中的任何空格。我查看了MDN文檔,YouTube視頻和stackoverflow問題,但我仍然不明白。你能指出我正確的方向嗎?這裏是的jsfiddle(它是迴文的功能。):https://jsfiddle.net/jn2tutty/71/正則表達式/ javascript
這裏是代碼:
var regexp = /[^A-Za-z]|\s+|/g;
我想創建一個正則表達式來查找任何不是字母的東西,而且我還想檢測字符串中的任何空格。我查看了MDN文檔,YouTube視頻和stackoverflow問題,但我仍然不明白。你能指出我正確的方向嗎?這裏是的jsfiddle(它是迴文的功能。):https://jsfiddle.net/jn2tutty/71/正則表達式/ javascript
這裏是代碼:
var regexp = /[^A-Za-z]|\s+|/g;
您正則表達式是正確的。您的代碼/小提琴不起作用,因爲琴絃有不同的外殼(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"));
現在,您的代碼可以使用其他一些改進。
正則表達式「去掉所有不是字母的東西」正則表達式(/[^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
是的,好點。我正在考慮用那句話更新答案。我想我現在會,謝謝! – acdcjunior
非常感謝。這非常有幫助。我仍在學習 :) –
該方法丟棄除了字母之外的所有內容,並使用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');
}
空格字符不是字母,所以不需要單獨測試它們。 – nnnnnn