我的字符串格式如下:
var string = "1SS+2d,12SS+7d,13SS+12d";
我的要求是将给定的字符串拆分为包含3个对象的数组,如下所示:
var collection = [{ id : 1,
connectiontype : "SS",
linelength : 7,
linetyype: d
},
{
id: 12,
connectiontype: "SS",
linelength: 2,
linetyype: d
},
{
id: 12,
connectiontype: "SS",
linelength: 2,
linetyype: d
},
{
id: 13,
connectiontype: "SS",
linelength: 12,
linetyype: d
}
]
我在string对象中尝试过split方法。但它需要更多的循环逻辑。如何使用RegExp获取此信息?
答案 0 :(得分:0)
您可以使用下一个正则表达式来构建对象
var regexp = /(\d+)(\w+)\+(\d+)(\w+)/;
var arr = string.split(',');
var collection = [];
var result;
for ( var key in arr ){
result = regexp.exec(arr[key]);
collection.push({
id : result[1],
connectiontype : result[2],
linelength : result[3],
linetyype: result[4]
});
}
答案 1 :(得分:0)
我建议使用split
使用逗号分割每个项目,然后您可以使用正则表达式来解析每个项目以创建对象:
var string = "1SS+2d,12SS+7d,13SS+12d";
var regex = /(\d+)(\w+)\+(\d+)(\w+)/;
var match = regex.exec(string);
var collection = [];
var items = string.split(',');
for (var i = 0; i < items.length; i++) {
var item = items[i];
var match = regex.exec(item);
collection.push({
id: match[1],
connectiontype: match[2],
linelength: match[3],
linetyype: match[4]
});
}
答案 2 :(得分:0)
拆分字符串然后循环遍历它。我假设SS
和d
在每个对象中都是相同的,但是YMMV。
var r = /^(\d+)SS\+(\d+)d$/;
var collection = [];
str.split(',').forEach(function (el) {
var m = r.exec(el);
var obj = {
id: m[1],
connectiontype: 'SS',
linelength: m[2],
linetyype: 'd'
};
collection.push(obj);
});