2017-09-12 91 views
0

如果匹配key: value,我想通過逗號分割以下字符串。斯普利特用逗號工作,直到遇到一個逗號在value將字符串拆分爲鍵值對

const string = "country: Kenya, city: Nairobi, population: 3.375M, democracy-desciption: Work in progress/ Not fully met, obstacles exist"

我想用這個結果來結束:

[[country: Kenya], 
[city: Nairobi], 
[population: 3.375M], 
[democracy-description: Work in progress/ Not fully met, obstacles exist]] 

預先感謝您。

+0

請仔細閱讀[我可以問什麼議題有關(http://stackoverflow.com/help/on-topic)和[避免哪些議題(https://開頭計算器.com/help/dont-ask)和[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)和[如何創建最小,完整和可驗證的示例](http ://stackoverflow.com/help/mcve)以及[參觀](http://stackoverflow.com/tour)。 *我們非常樂意幫助您修復代碼,但我們不爲您編寫代碼*。 –

+0

我已閱讀所有。 @NathanP。 – Nate

回答

3

你可能分裂嚴格通過查看如果不是逗號跟着冒號。

var string = "country: Kenya, city: Nairobi, population: 3.375M, democracy-desciption: Work in progress/ Not fully met, obstacles exist, foo: bar, bar, bar"; 
 

 
console.log(string.split(/, (?=[^,]+:)/).map(s => s.split(': ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

我沒有想過使用正則表達式。非常感謝! – Nate

1

易:

const table = 
string.split(",") //["key:value","key:value"] 
    .map(pair => pair.split(":")); //[["key","value"],["key","value"]] 

內置對象出於此:

const result = {}; 
table.forEach(([key,value]) => result[key] = value); 

//usable as: 

console.log(result.country); 

或使用JS地圖:

const result = new Map(table); 

//usable as: 

console.log(result.get("country")); 

Try it out