JavaScript中的拆分字符串的正则表达式

时间:2014-01-16 14:06:10

标签: javascript regex string

我的字符串格式如下:

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获取此信息?

3 个答案:

答案 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]
    });
}

Here is a working example

答案 2 :(得分:0)

拆分字符串然后循环遍历它。我假设SSd在每个对象中都是相同的,但是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);
});