2016-07-31 22 views
0

文字ではないものを見つけるための正規表現を作成しようとしていますが、文字列内の空白も検出したいと考えています。私はMDNのドキュメント、YouTubeのビデオ、およびstackoverflowの質問を見てきましたが、私はまだ理解していません。あなたは私を正しい方向に向けることができますか?ここでhttps://jsfiddle.net/jn2tutty/71/正規表現/ javascript

コードがされています:ここではjsfiddleは(。それは回文するための機能である)である

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

+0

空白文字は文字ではないため、別々にテストする必要はありません。 – nnnnnn

答えて

0

あなたの正規表現は正しいです。文字列のケーシングが異なる(Racecarracecar)ため、コード/フィドルが機能しません。

あなたも小文字に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のようになります。

+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'); 
}