如何将文本字符串拆分为部分?

时间:2017-01-15 19:12:26

标签: javascript string split

我有以下字符串:

var str = '01. Part1. 02. Part2. 04. Part3';

我需要从中得到数组:

['01. Part1.', '02. Part2.', '04. Part3']

到目前为止,我已经尝试过:

str.split(/\d+.(.*)/);

但结果不是我需要的:

["", " Part1. 02. Part2. 04. Part3", ""]

3 个答案:

答案 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);