如何使用正则表达式解析javascript中的数据?

时间:2012-11-25 09:49:39

标签: javascript regex parsing

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

这是我的数据样本:

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

由于

3 个答案:

答案 0 :(得分: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方法。 (见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

答案 1 :(得分: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"

答案 2 :(得分: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