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 で正規表現を使用して項目とその値を配列に入れるにはどうすればよいですか?
これは私のデータサンプルです:
battery.voltage: 13.50
battery.voltage.nominal: 12.0
beeper.status: enabled
device.type: ups
driver.name: blazer_ser
driver.parameter.pollinterval: 2
ありがとう
単一の正規表現を使用して、文字列データを 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"]);
正規表現を使用する理由は、単純にsubstr
and を使用できます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/);
以下のコードを使用してそれを行います...ここで変数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"