【发布时间】:2016-05-30 15:09:21
【问题描述】:
如何获得这样的数组
[
0: [ "first", "value", "1" ],
1: [ "second", "value", "2" ],
2: [ "third", "value", "3" ]
]
甚至更好
[ "first", "value", "1", "second", "value", "2", "third", "value", "3" ]
从字符串
"first.value[1].second.value[2].third.value[3]"
依赖单个 RegEx.exec() 运行?
我试过这个:
regex = /\.*([\w]+)\.([\w]+)\[([\d]*)\]/g;
var str = "first.value[1].second.value[2].third.value[3]";
result = regex.exec(str);
但我无法获得子捕获组(如第一个示例)。
PS - 我想为两种类型的结果(平面数组或嵌套数组)获取正则表达式s
【问题讨论】:
-
使用循环并动态构建数组。类似
while ((m=regex.exec(str)) !== null) { arr.push(m[1], m[2], m[3]); ....};见this demo 产生["first", "value", "1", "second", "value", "2", "third", "value", "3"] -
我知道我可以手动完成。但我很好奇如何用一个正则表达式做同样的事情。
-
您能用一个正则表达式阐明 部分吗?正则表达式无法创建、填充数组。有特定的语言手段。正则表达式只能匹配(或不匹配)某些文本。
-
我不想使用额外的迭代结构,而只是依赖正则表达式的魔法!或者,至少,我想知道这是否可能。但是您和 Federico Piazza(在对他的回答的评论中)回答了我的疑问。正则表达式不是那么神奇!
-
这取决于语言。在 Python 中,re 和 regex 模块中有非常酷的方法。只是 JS 对正则表达式没有那么神奇,而且它的正则表达式方法相当具有误导性。
标签: javascript regex nested capturing-group