如何在JavaScript中使用正則表達式將項目及其值放入數組中?如何使用正則表達式解析javascript中的數據?
這是我的數據樣本:
battery.voltage: 13.50
battery.voltage.nominal: 12.0
beeper.status: enabled
device.type: ups
driver.name: blazer_ser
driver.parameter.pollinterval: 2
感謝
如何在JavaScript中使用正則表達式將項目及其值放入數組中?如何使用正則表達式解析javascript中的數據?
這是我的數據樣本:
battery.voltage: 13.50
battery.voltage.nominal: 12.0
beeper.status: enabled
device.type: ups
driver.name: blazer_ser
driver.parameter.pollinterval: 2
感謝
使用下面的代碼來做到這一點...這裏變量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"
爲什麼要使用正則表達式,你可以簡單地使用substr
和indexOf
。假設你的列表存儲在一個數組中,你可以簡單地遍歷這些條目並在第一次出現冒號時進行分割。
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/);
這裏的一個解決方案,它使用單一的正則表達式使得只有一個穿過串數據:
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"]);