我有以下字符串:
var str = '01. Part1. 02. Part2. 04. Part3';
我需要从中得到数组:
['01. Part1.', '02. Part2.', '04. Part3']
到目前为止,我已经尝试过:
str.split(/\d+.(.*)/);
但结果不是我需要的:
["", " Part1. 02. Part2. 04. Part3", ""]
答案 0 :(得分:3)
主要问题是*
贪婪。通过添加?
使其变得懒惰。此外,使用match
方法可以更好地工作,因为split
会将正则表达式匹配视为分隔符,其中(没有捕获组)将不会包含在结果中。
var str = '01. Part1. 02. Part2. 04. Part3';
var arr = str.match(/\d+\..*?(\.|$)/g);
console.log(arr);

(\.|$)
部分用于说明.*?
应该去哪里,并处理字符串末尾的差异,其中没有终点,就像其他部分一样。 $
与字符串结尾匹配。
答案 1 :(得分:1)
一种方法:
var str = '01. Part1. 02. Part2. 04. Part3';
console.log(
// here we split the string on word-boundaries ("\b")
// followed by a number ("(?=\d)")
str.split(/\b(?=\d)/)
// here we iterate over the Array returned by
// String.prototype.split()
.map(
// using an Arrow function, in which
// 'match' is a reference to the current
// Array-element of the array over which
// we're iterating.
// here we return a new Array composed of
// each Array-element, with the leading and
// trailing white-spaces, using
// String.prototype.trim():
match => match.trim()
)
); // ["01. Part1.", "02. Part2.", "04. Part3"]
参考文献:
答案 2 :(得分:0)
另一种方法,使用否定前瞻:
var str = '01. Part1. 02. Part2. 04. Part3';
arr=str.split(/\s(?![a-zA-Z])/g); //match space not followed by letters
console.log(arr);