[英]Split string on [] brackets
字符串是某些輸入字段的名稱。 例子:
a[b][c]
x[y][z][]
我正在嘗試從中生成多維數組。
abc = value
xyz = [value]
(因為[]
而是一個數組)
無論如何,我有一些關於如何做到這一點的想法,但首先我需要將字符串拆分為包含所有鍵和子鍵的數組。
搜索谷歌我想出了這個
var parts = inputName.match(/[^\[\]]+/g);
它得到了我[a,b,c]
,但在第二個例子中我得到[x,y,z]
而不是[x,y,z, null]
我還能以任何方式匹配[]
並將其作為null添加到列表中嗎? 我對正則表達式並不熟悉
@AnnaK。 為什么不能簡單地使用ID和密鑰發送您的信息? 它是一個動態的形式嗎? 是因為你正在開發一個需要動態的框架嗎? 是因為你在多個地方使用一個功能? 你不能用名字來序列化嗎? 我們無法給你建議,因為我們仍然不知道為什么你需要將它作為一個數組傳輸(無論如何都要序列化),我們仍然不知道你的表單是什么樣的
因為我正在嘗試使用Ajax發送表單數據。 此外,在我發送數據之前,我需要預先添加一些我用javascript創建的字段。 我不能序列化它,至少不能用jQuery.serializeArray
如果這就是你的意思,因為如果我有多個鍵如x[y][z][]
,只會出現最后一個鍵
您可以使用以下解決方案:
var parts = inputName.split(/[[\]]{1,2}/);
parts.length--; // the last entry is dummy, need to take it out
console.log(parts); // ["x", "y", "z", ""]
如果你需要null值(因為有處理你沒有控制權),你可以使用這個片段來更新結果(cuTesy of @Ties):
parts = parts.map(function(item){ return item === '' ? null : item });
正則表達式: ([^\\[\\]]|\\[\\])+
將匹配:
a[b][c] // a, b, c
x[y][z][] // x, y, z
1[][2][][3][] // 1, [], 2, [], 3, []
我的基本想法是尋找[]而不是使用map()
將其替換為null。
("a[bb][c][]").match(/([^[\]]+|\[\])/g).map( function(val) { return val==="[]" ? null : val; });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.