2014-12-01 31 views
-1

我想分析排序字符串以下內容的JavaScript物件鍵值對:我如何解析一個管道分隔字符串到鍵值對在Javascript

var stringVar = 'PLNC||0|EOR|<br>SUBD|Pines|1|EOR|<br>CITY|Fort Myers|1|EOR|<br>'; 

4資本的每個字字母(PLNC,SUBD和CITY)是是一個關鍵的,而在緊隨其後的管中的字(一個或多個)是要的值(第一個,爲PLNC,將是不確定的,在一個用於SUBD將是'松樹',CITY的那個將是'邁爾斯堡')。

請注意'| EOR |
'緊接在每個鍵值對之前。

這樣做的最好方法是什麼?

+1

不簡單。你似乎有很多額外的管道。 – 2014-12-01 23:26:40

+0

是的,這是我嘗試使用這個工具遇到的問題之一。 – angularPrism 2014-12-01 23:27:36

+0

由|爆炸然後用reg exp循環它們 – Phil 2014-12-01 23:31:02

回答

2

我剛剛意識到它在技術上是一種帶有有趣線條結尾的csv格式。這有一些限制,因爲你的變量值不能包含任何|或者因爲它們是定義字符串結構的標記。你當然可以逃脫它們。

var stringVar = 'PLNC||0|EOR|<br>SUBD|Pines|1|EOR|<br>CITY|Fort Myers|1|EOR|<br>'; 

function decodeString(str, variable_sep, line_endings) 
{ 
    var result = []; 
    var lines = str.split(line_endings); 
    for (var i=0; i<lines.length; i++) { 
     var line = lines[i]; 
     var variables = line.split(variable_sep); 
     if (variables.length > 1) { 
      result[variables[0]] = variables[1]; 
     } 
    } 
    return result; 
} 

var result = decodeString(stringVar, "|", "<br>"); 

console.log(result); 
0

如果你有underscore(如果你不這樣做,那麼就嘗試了這一點通過其網頁上,只需打開控制檯,因爲他們有下劃線包括:)

然後玩它有點。以下是爲您的旅程開始:

_.compact(stringVar.split(/<br>|EOR|\|/)) 
0

嘗試

function parse(str) { 
    var str = str.replace(/<br>/gi); 
    console.log(str); 
    var arr = str.split('|'); 
    var obj = {}; 
    for (var i=0; i<arr.length; i=i+4) { 
     var key = arr[i] || ''; 
     var val_1 = arr[i+1] || ''; 
     var val_2 = arr[i+2] || ''; 
     if(key) { 
      obj[key] = val_1 + ':' + val_2; //or similar 
     } 
    } 
    return obj; 
} 

DEMO

這將在該問題的特定數據串的工作。

它也將在相同的一般格式的其他數據串的工作,而是依賴於:解析

  • 每一條記錄是一組由4種劃定字符串元素的前

    • <br>被丟棄| (管道)
    • 每個記錄的第一個元素是關鍵
    • 第二和第三元件相結合,以形成值
    • 第四個要素是可丟棄的。