2012-02-21 2 views
2

私は、この文字列を分割しようとしています:regexを使って異なる符号と空白を持つ文字列を分割する方法は?

bar .foo car.coo 

この配列に:

['bar',' .foo','car','.coo'] 

私はこのフレーズのバリエーションをしようとしているが、私はちょうどそれが右のように見えることはできません。

str.replace(/([.#:])/g, '$1').split(" "); 

スプリットのルールは - [.#:]の場合は分割しますが、それらの前に空白がある場合(.fooなど)、鶏には、空白が含まれています。

どうすればよいですか?

+2

は、アレイは、 '[「バー」、」になっていないでしょうが返されます:

あなたは正規表現で解析された文字列の配列を形成することになるstr.matchを、使用することができます。 foo car '、'。coo '] '?分割したい "foo"と "car"の間には文字はありません。 – Jeroen

答えて

6

"car.coo"は、文字が消費されることなく2つの配列要素に分割される必要があるため、おそらく.splitはあなたが望むものではありません。

"bar .foo car.coo".match(/([.#:]|[.#:])?[^.#: ]+/g); 
// ["bar", " .foo", "car", ".coo"] 
+0

+1、素敵なことを覚えておいてください。 – Steve

+0

素晴らしい! 「?」の後に何が来るのか説明できますか?表現の中で?私はそれが "[。#:]"または "[。#:]"であることを知っていますが、次に何が来ますか? – Alon

+0

@Alon: '[^。#:] + 'は、" 1つ以上ではない文字を意味します。 ":#:" '"。例えば、 '。+'は、特殊文字を含め、それ以降のものを消費します。 – pimvdb

1

"bar .foo car.coo".match(/ ?.?\w+/g)["bar", " .foo", " car", ".coo"]

関連する問題