如何获得这样的数组
[
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
答案 0 :(得分:3)
如果编辑的结果是你所追求的
[“first”,“value”,“1”,“second”,“value”,“2”,“third”,“value”,“3”]
然后你可以使用一个非常简单的正则表达式。
/(\w+)/g
实现第一个效果的最简洁方法是需要一些数组操作,因为Regex不能返回嵌套结构。
您可以使用上面的正则表达式(/(\w+)/g
)来获取matched
数组,并通过以下方式运行它:
var finalArr= [];
for (var i= 1, j= 0; i < matched.length; i += 3) {
finalArr[j] = match.slice(i, 3);
j++;
}
答案 1 :(得分:3)
我使用split
:
var str = "first.value[1].second.value[2].third.value[3]";
var res = str.split(/\]\.?|\[|\./)
答案 2 :(得分:2)
按照您的模式构思,您可以使用这样的正则表达式:
(.*?)\.(.*?)\[(\d+)\]\.?
<强> Working demo 强>
匹配信息
MATCH 1
1. [0-5] `first`
2. [6-11] `value`
3. [12-13] `1`
MATCH 2
1. [15-21] `second`
2. [22-27] `value`
3. [28-29] `2`
MATCH 3
1. [31-36] `third`
2. [37-42] `value`
3. [43-44] `3`
答案 3 :(得分:1)
string.match(/(\w+)/g)
string上的match方法可以生成您正在寻找的数组。只需使用\w
提取单词:
var regex = /(\w+)/g;
var str = "first.value[1].second.value[2].third.value[3]";
var arr = str.match(regex)
document.querySelector('pre').innerHTML = JSON.stringify(arr, 0, 4);
<pre></pre>
答案 4 :(得分:0)
您可以尝试两个步骤,使用].
进行拆分,然后使用.
进行下一步拆分
var str = "first.value[1].second.value[2].third.value[3]";
var tempArr = (str+'.').replace(/\[/g,'.').split('].');
var finalArr = tempArr.map(function(v){return v.split('.');});
//result: [["first", "value", "1"], ["second", "value", "2"], ["third", "value", "3"], [""]]