2016-11-09 35 views
1

我有像"[4]Motherboard, [25]RAM"括號中的數字不同的字符串我怎麼能這樣的字符串轉換成JSON陣列(保留兩個ID和值)是這樣的:轉換字符串成JSON數組索引括號

{"data":[ 
    {"id":"4","item":"Motherboard"}, 
    {"id":"25","item":"RAM"} 
]}; 

我嘗試使用split(",")來創建數組,但我真的無法找到如何在這種情況下獲取內部數據。

+4

去與_obvious_解決方案,讓我們知道你有沒有試過.. – Rayon

回答

1
function toArray(string) { 
    return { 
     data: string.split(",").map(function(str) { 
      str = str.trim(); 
      return { 
       id: str.substring(1, str.indexOf("]")), 
       item: str.substring(str.indexOf("]") + 1), 
      }; 
     }), 
    }; 
} 
2

這裏有一種方法可以做到這一點。模式\[(\d+?)\](.+)的工作原理是這樣的:

  1. (…)是一個捕獲組。只是意味着括號內的任何匹配都是結果中的一個標記。
  2. \d意味着一個數字
  3. \d+指一個數字,一次或多次
  4. \d+?指一個數字,一次或多次,但模式匹配別的東西之前儘可能少的不可能性。
  5. .+表示任何角色,一次或多次。

[]在正則表達式中有特殊的含義,所以如果你真的想自己匹配的字符,你需要逃生他們像這樣\[\]

當使用字符串定義正則表達式時,雙反斜槓\\只是一個JS怪異的東西,而不是使用/literal/。只有兩種說法相同的方法。

有足夠的資源來學習正則表達式的語法,http://regex101.com是一個模式和實驗的好地方。

var input = "[4]Motherboard, [25]RAM"; 
 
var pattern = '\\[(\\d+?)\\](.+)'; 
 
var result = input.split(',').map(function (item) { 
 
    var matches = item.match(new RegExp(pattern)); 
 
    return {id: matches[1], val: matches[2]}; 
 
}); 
 

 
console.log(result)

+0

良好的人,但你能解釋一下正則表達式一點?我知道這是一個簡單的例子,但仍然... –

2

你可以使用正則表達式,這需要數和字符串,並將其指定爲屬性的對象。

var string = "[4]Motherboard, [25]RAM", 
 
    data = string.split(', ').map(function (a) { 
 
     var p = a.match(/^\[(\d+)\](.+)$/); 
 
     return { id: p[1], item: p[2] }; 
 
    }); 
 
console.log(data);

+0

這不符合問題中的格式。你有'{「4」:「主板」}',但它要求'{「id」:「4」,「item」:「主板」}'。 – afuous

+0

對不起,現在應該按需要工作。 –