在[]括号上拆分字符串

时间:2013-11-25 16:21:16

标签: javascript regex

字符串是某些输入字段的名称。例子:

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][],则只显示最后一个键

3 个答案:

答案 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; });