[英]convert string with square brackets to array or list in Javascript
[英]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+?)\\](.+)
工作方式如下:
(…)
是一個捕獲組。 只是意味着方括號內的任何匹配項都將成為結果的標記。 \\d
表示一個數字 \\d+
表示一個或多個數字 \\d+?
表示一個數字,一次或多次,但在模式與其他內容匹配之前盡可能少。 .+
表示任何字符,一次或多次。 [
和]
在正則表達式中有特殊含義,因此,如果您實際上想匹配字符本身,則需要像\\[
和\\]
那樣對它們進行轉義 。
當通過字符串而不是使用/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.