仅在分隔符的前n次出现时拆分字符串

nin*_*nes 28 javascript

我想在分隔符的前n次出现时只分割一个字符串.我知道,我可以使用循环将它们添加到一起,但是不是更直接的方法吗?

var string = 'Split this, but not this';    
var result = new Array('Split', 'this,', 'but not this');
Run Code Online (Sandbox Code Playgroud)

dav*_*vin 35

根据MDN:

string.split(separator, limit);
Run Code Online (Sandbox Code Playgroud)

更新:

var string = 'Split this, but not this',
    arr = string.split(' '),
    result = arr.slice(0,2);

result.push(arr.slice(2).join(' ')); // ["Split", "this,", "but not this"]
Run Code Online (Sandbox Code Playgroud)

更新版本2(一个slice更短):

var string = 'Split this, but not this',
    arr = string.split(' '),
    result = arr.splice(0,2);

result.push(arr.join(' ')); // result is ["Split", "this,", "but not this"]
Run Code Online (Sandbox Code Playgroud)

  • 这将删除第三部分. (2认同)
  • 简而言之,这不能处理字符串只有一个空格的情况-结果数组将包含一个额外的空字符串。 (2认同)

Laa*_*aas 19

使用Array.slice:

function splitWithTail(str,delim,count){
  var parts = str.split(delim);
  var tail = parts.slice(count).join(delim);
  var result = parts.slice(0,count);
  result.push(tail);
  return result;
}
Run Code Online (Sandbox Code Playgroud)

结果:

splitWithTail(string," ",2)
// => ["Split", "this,", "but not this"]
Run Code Online (Sandbox Code Playgroud)


Poi*_*nty 6

JavaScript".split()"函数已经接受第二个参数,给出要执行的最大拆分数.但是,它不会保留原始字符串的尾端; 你必须重新粘上它.

另一种方法是用正则表达式迭代地剪掉字符串的前导部分,当你获得限制时停止.

var str = "hello out there cruel world";
var parts = [];
while (parts.length < 3) { // "3" is just an example
  str = str.replace(/^(\w+)\s*(.*)$/, function(_, word, remainder) {
    parts.push(word);
    return remainder;
  });
}
parts.push(str);
Run Code Online (Sandbox Code Playgroud)

编辑 - 它只是发生在我身上,另一个简单的方法就是使用普通的".split()",取出前几个部分,然后只是".slice()"和".join()"其余部分.

  • 实际上,没有。他会得到`["Split", "this,", "but"]`,而不是他要的。`split` 的限制令人惊讶地无用,并且与许多其他 `split` 函数不同。 (2认同)
  • 是的@TJ,这就是为什么我添加了关于将“尾巴”重新粘上的警告。 (2认同)
  • <s>我刚才评论时不在场.: - )</ s>等等,也许是. (2认同)

Eug*_*nko 6

结合使用ES6 splitjoinES6具有以下功能:

let [str1, str2, ...str3] = string.split(' ');
str3 = str3.join(' ');
Run Code Online (Sandbox Code Playgroud)