我有像"[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