2010-04-30 76 views
3

I'd asked a question about the splitting the a string like below:幫助在JavaScript分割字符串

輸入字符串:a=>aa| b=>b||b | c=>cc

和輸出:

a=>aa 
b=>b||b 
c=>cc

了Kobi的回答是:

var matches = "a=>aa|b=>b||b|c=>cc".match(/(?:[^|]|\|\|)+/g) 

他的回答工作,但我需要使用.split()方法並存儲輸出在一個數組中。

所以我不能使用.match()方法。

我該怎麼辦?

+0

關於「輸出」的一個問題 - 你想要'['a => aa','b => b || b','c => cc']',還是來自PHP背景,考慮一個「哈希表」(只是JS中的一個對象)'{「a」:「aa」,「b」:「b || b」,「c」:「cc」}'? – gnarf 2010-04-30 09:00:07

回答

1

.match返回數組過,所以使用.match

arr = "a=>aa|b=>b||b|c=>cc".match(/(?:[^|]|\|\|)+/g) 
// a=>aa,b=>b||b,c=>cc 
arr.length 
// 3 
arr[0] 
// a=>aa 
+1

實際上我需要這個問題來編輯我的課程。 我解釋了匹配函數到我的教授,他說你必須回答與分裂這個問題... 一兩件事: 輸入爲:A => AA | B => b || B | C => CC (每個角色之間沒有空格) – Hero 2010-05-01 07:35:42

2

這裏沒有問題是我的刺:

var str = 'a=>aa| b=>b||b | c=>cc'; 
var arr = str.split(/\s*\|\s+/); 
console.log(arr) 
// ["a=>aa", "b=>b||b", "c=>cc"] 

var obj = {}; // if we want the "object format" 
for (var i=0; i<arr.length; i++) { 
    str=arr[i]; 
    var match = str.match(/^(\w+)=>(.*)$/); 

    if (match) { obj[match[1]] = match[2]; } 
} 
console.log(obj); 

// Object { a:"aa", b:"b||b", c: "cc" } 

而正則表達式:

/ 
\s* # Match Zero or more whitespace 
\| # Match '|' 
\s+ # Match one or more whitespace (to avoid the ||) 
/
1

雖然我很討厭與我自己辯論,另一個可能的解決方案是:

var matches = 'a=>aa|b=>b||b|c=>cc'.split(/\b\s*\|\s*\b/g); 

含義:拆分當你看到|用空格包圍,字母數字字符之間。
此版本也將保留d|=d完好無損。
\b雖然可以引入錯誤,它可能如果管道是不是字母數字字符之間,例如a=>(a+a)|b=>b不會分裂也不會分裂。

0

我在這個問題上你的另一份發表在這個(請不要問問題多次!)

這應該做到這一點:

"a=>aa|b=>b||b|c=>cc".split(/\|(?=\w=>)/); 

這將產生:

["a=>aa", "b=>b||b", "c=>cc"]