簡體   English   中英

將括號中帶有索引的字符串轉換為JSON數組

[英]Convert string with index in brackets to JSON array

我在方括號中有各種帶有數字的字符串,例如"[4]Motherboard, [25]RAM"如何將這樣的字符串轉換為JSON數組(保留id和值),如下所示:

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

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

這里是一種方法。 模式\\[(\\d+?)\\](.+)工作方式如下:

  1. (…)是一個捕獲組。 只是意味着方括號內的任何匹配項都將成為結果的標記。
  2. \\d表示一個數字
  3. \\d+表示一個或多個數字
  4. \\d+? 表示一個數字,一次或多次,但在模式與其他內容匹配之前盡可能少。
  5. .+表示任何字符,一次或多次。

[]在正則表達式中有特殊含義,因此,如果您實際上想匹配字符本身,則需要像\\[\\]那樣對它們進行轉義

當通過字符串而不是使用/literal/定義正則表達式時,雙反斜杠\\\\只是JS奇數。 只是兩種表達同一件事的方式。

學習正則表達式語法的資源很多,而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) 

您可以使用正則表達式,該正則表達式采用數字和字符串,並將其作為屬性分配給對象。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM