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)
注意:答案处理原始案例 - 在更新之前
使用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)
当您(...)传递给的正则表达式中有捕获组 ( ) 时.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)