2016-10-14 5 views
2

javascriptに次の正規表現があります。逆順で検索することはできません。,は、より多くのエスケープ文字は\です。Regexは前の文字と一致する文字を検索し続けます

[^\\],

正規表現は\によって進めないコンマがどこにあるか見つけるために正常に動作しますが、また、試合としてコンマを進めるため、誤った文字列を分割文字を検索します。私は、文字列

hello\,there,are

を持っていた場合

例えば、結果はe,が私の正規表現だけでなく,と一致していることだろう。分割された文字列配列が

[hello\,ther] [are]

を読ん作るなぜ私が使用しています正規表現ではなく、唯一のコンマのマッチングのカンマや進行の文字を見つけておくのですか?

+0

あなたregesは2つの文字で構成されているので。 1番目の文字はバックスラッシュではないもので、2番目の文字はカンマになります。 – anubhava

+0

@anubhavaが正しいです、あなたの正規表現はコンマの前に '\\'以外のものとマッチします。 –

+0

@anubhavaありがとう、それは私が思ったことです。私の目標を達成するために文字列を逆にして、JavaScriptの他にとにかくありますか? – jgr208

答えて

3

ここでsplitを使用することはできません。なぜなら、JS正規表現ではサポートされていないlookbehindが必要なためです。適切な正規表現とのマッチを使用します。下記のように:

/(?:[^\\,]|\\.)+/g 

regex demoを参照してください。

パターンは任意の\\.

JSデモと文字(改行文字を除く)をエスケープ,\[^\\,])または(|)以外の任意の文字の1以上(+)配列と一致します

var regex = /(?:[^\\,]|\\.)+/g; 
 
var str = "hello\\,there,are"; 
 
var res = str.match(regex); 
 
console.log(res);

+0

ハングアップ...これはどのように受け入れられますか?これは 'string.split()'を使用しても動作しません。 – musefan

+0

@musefan:このシナリオでは 'split'は動作しません。 –

+0

@musefan '.split()'は動作しませんが、 '.match()'は要求されたOPとして配列を返します。 –

関連する問題