2014-01-16 36 views
0

分割字符串正則表達式我有字符串中像下面的格式:用於在JavaScript

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 
       }    

] 

var string = "1SS+2d,12SS+7d,13SS+12d"; 

我的要求是給定的字符串與3個對象像以下列格式分成數組

我已經嘗試在字符串對象中使用拆分方法。但是它需要更多的循環邏輯。如何使用RegExp獲取此信息?

+1

'SS'和'd'總是會一樣嗎? – Andy

回答

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

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); 
});