2012-11-25 57 views

回答

0

使用下面的代碼來做到這一點...這裏變量data包含您的數據......

data=data.split(/\n+/); 
var output={}; 
for(var i=0;i<data.length;i++){ 
    var a=data[i].split(/:\040+/); 
    output[a[0]]=a[1]; 
} 

這些代碼會給你像下面的數組...

Array ( 
    battery.voltage: "13.50", 
    battery.voltage: "12.0", 
    beeper.status: "enabled", 
    device.type: "ups", 
    driver.name: "blazer_ser", 
    driver.parameter.pollinterval: "2" 
) 

例如:

output['driver.name'] === "blazer_ser" 
0

爲什麼要使用正則表達式,你可以簡單地使用substrindexOf。假設你的列表存儲在一個數組中,你可以簡單地遍歷這些條目並在第一次出現冒號時進行分割。

var items = [...]; // Your items. 
var arr = {}; 
for (var i = items.length - 1; i >= 0; i--) { 
    var key = items[i].substr(0, items[i].indexOf(':')); 
    var value = items[i].substr(items[i].indexOf(':') + 1).trim(); 
    arr[key] = value; 
} 

此解決方案僅適用於實現trim方法的瀏覽器。如果您想保存一面,您可以覆蓋String.prototype並添加修剪方法。 (請參閱Trim string in JavaScript?

如果您將項目作爲由換行符分隔的字符串,則可以通過split輕鬆將其拆分爲數組;

var list = "battery.voltage: 13.50\n" 
     + "battery.voltage.nominal: 12.0\n" 
     + "beeper.status: enabled\n" 
     + "device.type: ups\n" 
     + "driver.name: blazer_ser\n" 
     + "driver.parameter.pollinterval: 2";​​ 
var items = list.split(/\n/); 

DEMO

0

這裏的一個解決方案,它使用單一的正則表達式使得只有一個穿過串數據:

var list = "battery.voltage: 13.50\n" 
     + "battery.voltage.nominal: 12.0\n" 
     + "beeper.status: enabled\n" 
     + "device.type: ups\n" 
     + "driver.name: blazer_ser\n" 
     + "driver.parameter.pollinterval: 2"; 


function parse(data) { 
    var match, result = {};    
    var pattern = /\s*([^:\s]+)\s*:\s*([^:\s]+)$/gm; 
    while (match = pattern.exec(data)) { 
     result[match[1]] = match[2]; 
    } 
    return result; 
} 

var test = parse(list); 

// dump array 
for (var i in test) 
    console.log(i + ": " + test[i]); 

// select one 
console.log(test["driver.parameter.pollinterval"]); 

Click here to try it out on jsfiddle