-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

単一の正規表現を使用して、文字列データを 1 回だけ通過させるソリューションを次に示します。

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 に答える
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 に答える