是否有javascript / jquery方法或函数可以让我在第n次出现选定分隔符时拆分字符串?我喜欢它的工作方式就像常规的str.split(分隔符)一样,除了在分隔符的每次出现时都不要拆分,每次都可以指示它跳过n个。
var str = "A,BB,C,DDD,EEEE,F";
var strAry = str.split(",");
会导致strAry看起来像{" A"," BB"," C"," DDD"," EEEE"" F"}
我想要的是{" A,BB"," C,DDD"," EEEE,F"}假设我将第n次出现设置为2。
我编写了一个似乎有用的小函数,但希望有一种更简单的方法:
function splitn(fullString, delimiter, n){
var fullArray = fullString.split(delimiter);
var newArray = [];
var elementStr = "";
for(var i = 0; i < fullArray.length; i++) {
if (i == fullArray.length-1) {
if (elementStr.length == 0) {
elementStr = fullArray[i];
} else {
elementStr += (delimiter + fullArray[i]);
}
newArray.push(elementStr);
} else {
if (((i + 1) % n) == 0) {
if (elementStr.length == 0) {
elementStr = fullArray[i];
} else {
elementStr += (delimiter + fullArray[i]);
}
newArray.push(elementStr);
elementStr = "";
} else {
if (elementStr.length == 0) {
elementStr = fullArray[i];
} else {
elementStr += (delimiter + fullArray[i]);
}
}
}
};
return newArray;
};
感谢。
答案 0 :(得分:2)
你可以简单地使用Array.prototype.reduce()修改由你喜欢的分割返回的数组。这个想法类似于你的代码,只是更短。
function modify(str, n, delim) {
return str.split(delim).reduce(function(output, item, i) {
if (!(i % n)) {
output.push(item);
} else {
output[i / n | 0] += delim + item;
};
return output;
}, []);
};
modify("A,BB,C,DDD,EEEE,F", 3, ','); //["A,BB,C", "DDD,EEEE,F"]
modify("A,BB,C,DDD,EEEE,F", 2, ','); //["A,BB", "C,DDD", "EEEE,F"]
答案 1 :(得分:1)
编辑:刚刚注意到你想要使用任意的&#34; nth&#34;值。我更新了它,因此您只需将nth
更改为您喜欢的任何正整数。
这是一种利用.indexOf()
的第二个参数的方式,以便您可以在字符串中的最后一个结束点之后锚定您的搜索:
function splitn(fullString, delimiter, n) {
var lastIdx = 0
, idx = -1
, nth = 0
, result = [];
while ((idx = fullString.indexOf(delimiter, idx + delimiter.length)) !== -1) {
if ((nth = ++nth % n) === 0) {
result.push(fullString.slice(lastIdx, idx));
lastIdx = idx + 1;
}
}
result.push(fullString.slice(lastIdx));
return result;
}
var result = splitn("A,BB,C,DDD,EEEE,F", ",", 2);
document.body.innerHTML = "<pre>" + JSON.stringify(result, null, 4) + "</pre>";
&#13;