我想拆分字符串
'something.somethingMore.evenMore[123].last'
到
['something',
'something.somethingMore',
'something.somethingMore.evenMore[123]',
'something.somethingMore.evenMore[123].last']
我想不出用分隔符“。”来分割字符串的简单解决方案,但是前面有字符串的内容。
我想拆分字符串
'something.somethingMore.evenMore[123].last'
到
['something',
'something.somethingMore',
'something.somethingMore.evenMore[123]',
'something.somethingMore.evenMore[123].last']
我想不出用分隔符“。”来分割字符串的简单解决方案,但是前面有字符串的内容。
现代 JS 编程风格类似于
str //take the input
.split('.') //and split it into array of segments,
.map( //which we map into a new array,
function(segment, index, segments) //where for each segment
return segments.slice(0, index+1) //we take the segments up to its index
.join(".") //and put them back together with '.'
;
}
)
这利用了Array#map
函数不仅传递当前值,还传递其索引和整个输入数组的事实。这使我们可以轻松地使用slice
来获取包含当前段之前的所有段的数组。
我不会称我的解决方案很简单,但是:
function splitArrayIntoGoofyArray(val){
var str =val.split("."), arr = [];
for (var x = str.length; x >= 1; x--){
var cnt = str.length - x;
arr.push((cnt > 0) ? arr[cnt - 1] + "." + str[cnt] : str[cnt]);
}
return arr;
}
console.log(splitArrayIntoGoofyArray("aaa.bbb.ccc.ddd"));
您可以尝试匹配而不是拆分,
> var s = 'something.somethingMore.evenMore[123].last';
undefined
> var regex = /(?=(^((([^.]*)\.[^.]*)\.[^.]*)\.[^.]*))/g;
undefined
> regex.exec(s)
[ '',
'something.somethingMore.evenMore[123].last',
'something.somethingMore.evenMore[123]',
'something.somethingMore',
'something',
index: 0,
input: 'something.somethingMore.evenMore[123].last' ]
要获得所需的输出,
> regex.exec(s).slice(1,5)
[ 'something.somethingMore.evenMore[123].last',
'something.somethingMore.evenMore[123]',
'something.somethingMore',
'something' ]
这取决于什么是简单的解决方案。最简单的方法是创建第一个数组
var str = 'something.somethingMore.evenMore[123].last';
var arr = str.split('.');
然后用这个数据填充新数组
var result = [];
for (var i = 0; i < arr.length; i++) {
var item = [];
for (var j = 0; j <= i; j++) {
item.push(arr[j]);
}
result.push(item.join('.'))
}
我想你需要一个循环:
同时找到“。” 字符,返回列表子字符串,直到新的“。” 指数。使用找到的最后一个正确索引开始每次搜索。