-2

如何在 javascript 中使用正则表达式将项目及其值放入数组中?

这是我的数据样本:

battery.voltage: 13.50
battery.voltage.nominal: 12.0
beeper.status: enabled
device.type: ups
driver.name: blazer_ser
driver.parameter.pollinterval: 2

谢谢

4

3 回答 3

0

为什么要使用正则表达式,你可以简单地使用substrand 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并添加修剪方法。(请参阅在 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/);

演示

于 2012-11-25T11:22:31.890 回答
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"
于 2012-11-25T11:53:39.430 回答
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"]);

单击此处在 jsfiddle 上试用

于 2012-11-25T22:42:56.390 回答