あなたの正規表現は正しいです。文字列のケーシングが異なる(Racecar
対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を参照してください。
あなたのコードでは、いくつかの改善点があります。
regex(/[^A-Za-z]|\s+/g
)という正規表現は、「/[^A-Za-z]/g
」に簡略化することができます。しかし、あなたは本当にそれを必要としないかもしれません(私はあなたの要件を知らない、あなたの要件が本当にあなただけのスペースではなく、非文字を削除したい場合は、それがまだ必要かもしれない)。
最初のnospace
は、入力からの最初の空白だけを置き換えます。正規表現を使用すると、すべての正規表現を置き換えることができます(これが本当に必要な場合にのみ行います)。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のようになります。
空白文字は文字ではないため、別々にテストする必要はありません。 – nnnnnn