将括号中有索引的字符串转换为JSON数组

Convert string with index in brackets to JSON array

本文关键字:转换 字符串 JSON 数组 索引      更新时间:2023-09-26

我有各种字符串,括号中有数字,如"[4]Motherboard, [25]RAM",我如何将这样的字符串转换为JSON数组(保持id和值),如:

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

我尝试使用split(",")来创建数组,但我真的找不到如何在这种情况下获得内部数据。

您可以使用正则表达式,它接受数字和字符串,并将其作为属性赋值给对象。

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

这里有一种方法。模式'[('d+?)'](.+)是这样工作的:

  1. (…)为捕获组。这意味着括号内的任何匹配都将是结果中的一个令牌。
  2. 'd表示数字
  3. 'd+表示一个数字,一次或多次
  4. 'd+?表示一个数字,一次或多次,但在模式匹配其他内容之前尽可能少。
  5. .+表示任何字符,一次或多次。

[]在正则表达式中有特殊的含义,所以如果你真的想匹配字符本身,你需要像'[']那样对转义

双反斜杠''在通过字符串定义正则表达式而不是使用/literal/时只是JS的一个奇怪现象。这是同一件事的两种说法。

有很多学习regex语法的资源,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)

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