我有像"[4]Motherboard, [25]RAM"
括号中的数字不同的字符串我怎么能这样的字符串转换成JSON阵列(保留两个ID和值)是这样的:转换字符串成JSON数组索引括号
{"data":[
{"id":"4","item":"Motherboard"},
{"id":"25","item":"RAM"}
]};
我尝试使用split(",")
来创建数组,但我真的无法找到如何在这种情况下获取内部数据。
我有像"[4]Motherboard, [25]RAM"
括号中的数字不同的字符串我怎么能这样的字符串转换成JSON阵列(保留两个ID和值)是这样的:转换字符串成JSON数组索引括号
{"data":[
{"id":"4","item":"Motherboard"},
{"id":"25","item":"RAM"}
]};
我尝试使用split(",")
来创建数组,但我真的无法找到如何在这种情况下获取内部数据。
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),
};
}),
};
}
这里有一种方法可以做到这一点。模式\[(\d+?)\](.+)
的工作原理是这样的:
(…)
是一个捕获组。只是意味着括号内的任何匹配都是结果中的一个标记。\d
意味着一个数字\d+
指一个数字,一次或多次\d+?
指一个数字,一次或多次,但模式匹配别的东西之前尽可能少的不可能性。.+
表示任何角色,一次或多次。[
和]
在正则表达式中有特殊的含义,所以如果你真的想自己匹配的字符,你需要逃生他们像这样\[
和\]
。
当使用字符串定义正则表达式时,双反斜杠\\
只是一个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)
良好的人,但你能解释一下正则表达式一点?我知道这是一个简单的例子,但仍然... –
你可以使用正则表达式,这需要数和字符串,并将其指定为属性的对象。
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);
这不符合问题中的格式。你有'{“4”:“主板”}',但它要求'{“id”:“4”,“item”:“主板”}'。 – afuous
对不起,现在应该按需要工作。 –
去与_obvious_解决方案,让我们知道你有没有试过.. – Rayon