在第n个字符处切割一个string

我想要做的就是取一个像this.those.that这样的string,并从第n个字符中得到一个子string。 所以,从string的开始到第二次出现. 会返回this.those 。 同样,从第二次出现. 到string的末尾将返回。 对不起,如果我的问题是模糊的,解释起来并不容易。 此外,请不要build议做额外的variables,结果将是一个string,而不是一个数组。

你可以在没有数组的情况下做到这一点,但是需要更多的代码,而且不易读。

一般来说,你只想使用尽可能多的代码来完成工作,这也增加了可读性。 如果您发现此任务正在成为性能问题(基准testing), 那么您可以决定开始重构性能。

 var str = 'this.those.that', delimiter = '.', start = 1, tokens = str.split(delimiter).slice(start), result = tokens.join(delimiter); // those.that 

jsFiddle 。

我很困惑,为什么你想纯粹用string函数做事情,但我想你可以做下面的事情:

 //str - the string //c - the character or string to search for //n - which occurrence //fromStart - if true, go from beginning to the occurrence; else go from the occurrence to the end of the string var cut = function (str, c, n, fromStart) { var strCopy = str.slice(); //make a copy of the string var index; while (n > 1) { index = strCopy.indexOf(c) strCopy = strCopy.substring(0, index) n--; } if (fromStart) { return str.substring(0, index); } else { return str.substring(index+1, str.length); } } 

不过,我强烈主张像alex这样简单的代码。

尝试这个 :

 "qwe.fs.xczv.xcv.xcv.x".replace(/([^\.]*\.){3}/, ''); "xcv.xcv.x" 

"qwe.fs.xczv.xcv.xcv.x".replace(/([^\.]*\.){**nth**}/, ''); 第n个是要移除的事件的数量。

以防万一某人需要“这个”和“那些”,就像他在评论中描述的那样,这是一个修改后的代码:

 var str = 'this.those.that', delimiter = '.', start = 1, tokens = str.split(delimiter), result = [tokens.slice(0, start), tokens.slice(start)].map(function(item) { return item.join(delimiter); }); // [ 'this', 'those.that' ] document.body.innerHTML = result; 

如果你真的想坚持string方法,那么:

 // Return a substring of s upto but not including // the nth occurence of c function getNth(s, c, n) { var idx; var i = 0; var newS = ''; do { idx = s.indexOf(c); newS += s.substring(0, idx); s = s.substring(idx+1); } while (++i < n && (newS += c)) return newS; }