字符串是某些输入字段的名称。例子:
a[b][c]
x[y][z][]
我正在尝试从中生成多维数组。
a.b.c = value
x.y.z = [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][]
,则只显示最后一个键
答案 0 :(得分:5)
您可以使用以下解决方案:
var parts = inputName.split(/[[\]]{1,2}/);
parts.length--; // the last entry is dummy, need to take it out
console.log(parts); // ["x", "y", "z", ""]
如果您需要空值(因为有处理您无法控制),您可以使用此片段更新结果(简称@Ties):
parts = parts.map(function(item){ return item === '' ? null : item });
答案 1 :(得分:2)
正则表达式:([^\[\]]|\[\])+
将匹配:
a[b][c] // a, b, c
x[y][z][] // x, y, z
1[][2][][3][] // 1, [], 2, [], 3, []
答案 2 :(得分:1)
我的基本想法是寻找[]而不是使用map()
将其替换为null。
("a[bb][c][]").match(/([^[\]]+|\[\])/g).map( function(val) { return val==="[]" ? null : val; });