Concat数组值

Ale*_*shy 1 javascript regex arrays

我有这个字符串:

Item 1Item 2Item 3Item 4
Run Code Online (Sandbox Code Playgroud)

我想得到:

["Item 1", "Item 2", "Item 3", "Item 4"]
Run Code Online (Sandbox Code Playgroud)

我试着这样做:

var string = 'Item 1Item 2Item 3Item 4'
var regex = string.split(/(\d)/)
regex.splice(-1, 1)
regex[regex.length - 2] += regex[regex.length - 1];
regex.splice(-1, 1)
console.log(regex);
Run Code Online (Sandbox Code Playgroud)

但它不起作用,任何想法如何获得理想的结果?

编辑:

max处的字符串可能如下所示:

Item 1Item 2Item 3Item 4Item NItem N-1
Run Code Online (Sandbox Code Playgroud)

Ori*_*ori 9

注意:答案处理原始案例 - 在更新之前

使用String.match()查找以数字序列(结束非数字的序列regex101):

var string = 'Item 1Item 2Item 3Item 4'
var arr = string.match(/\D+\d+/g)
console.log(arr);
Run Code Online (Sandbox Code Playgroud)

  • `\ d` - >`\ d +`更好 (3认同)

p.s*_*w.g 5

当您(...)传递给的正则表达式中有捕获组 ( ) 时.split,捕获的文本将作为结果的一部分返回。这就是为什么你有"1""2"等在之间"Item "的。

除了@Ori Dori 的解决方案的一些变体之外,您还可以使用一个前瞻断言来 解决这个问题(?=...),这是一个非捕获结构。

var string = 'Item 1Item 2Item 3Item 4Item NItem N-1';
var arr = string.split(/(?=Item)/);
console.log(arr);
Run Code Online (Sandbox Code Playgroud)

这将通过在文本出现之前立即拆分字符串来工作"Item"


对于完全不使用正则表达式的更强力的解决方案:

var string = 'Item 1Item 2Item 3Item 4Item NItem N-1';
var arr = [];
var i = string.indexOf('Item', 1);
while (i >= 0) {
  arr.push(string.substr(0, i));
  string = string.substr(i);
  i = string.indexOf('Item', 1);
}
arr.push(string);
console.log(arr);
Run Code Online (Sandbox Code Playgroud)