2014-12-05 104 views
0

我想寫正則表達式來捕獲數據,但努力完成它。正則表達式改進

從數據:

Code:Name Another-code:Another name 

我需要一個數組:

['Code:Name', 'Another-code:Another name'] 

的問題是,代碼幾乎可以是任何東西,但空間。

我知道如何去做而不使用正則表達式,但決定給他們一個機會。

更新:忘了提及元素的數量可以從一個變化到無窮大。所以數據:

Code:Name -> ['Code:Name'] 
Code:Name Code:Name Code:Name -> ['Code:Name', 'Code:Name', 'Code:Name'] 

也是合適的。

+0

你運行哪種語言?根據'\ s(?= \ S +?:)'分割輸入' – 2014-12-05 17:43:00

+0

將使用JavaScript – zaynetro 2014-12-05 17:43:35

+0

預期輸出是什麼?爲什麼你將輸入分成兩行? – 2014-12-05 17:54:19

回答

2

只需根據空格後面跟一個或多個非空格字符和一個:符號來分割輸入。

> "Code:Name Another-code:Another name".split(/\s(?=\S+?:)/) 
[ 'Code:Name', 'Another-code:Another name' ] 

OR

> "Code:Name Another-code:Another name".split(/\s(?=[^\s:]+:)/) 
[ 'Code:Name', 'Another-code:Another name' ] 
+0

多次出現的最佳解決方案。 – Toto 2014-12-05 17:57:32

1

約如何:2.

\S+

^(\S+:.+?)\s(\S+:.+)$ 

Code:Name是在第1組和Another-code:Another name在基是指一個或多個字符不是空格。

+0

對提供的示例非常有用,但忘記提及可能會有所不同。更新了問題 – zaynetro 2014-12-05 17:54:14

+0

因此,最好像@AvinashRaj的答案一樣分裂。 – Toto 2014-12-05 17:57:01

+0

True剛剛測試過 – zaynetro 2014-12-05 17:57:43

0

這裏是一個辦法做到這一點,而無需使用正則表達式:

var s = 'Code:Name Another-code:Another name'; 

if ((pos = s.indexOf(' '))>0) 
    console.log('[' + s.substr(0, pos) + '], [' + s.substr(pos+1) + ']'); 

//=> [Code:Name], [Another-code:Another name]