JS的正则expression式按行分割

你如何将一段长长的文本分成不同的行? 为什么这个返回line1两次?

/^(.*?)$/mg.exec('line1\r\nline2\r\n'); 

[“line1”,“line1”]

我打开多行修饰符,使^$匹配行的开始和结束。 我也打开全局修改器捕捉所有行。

我希望使用正则expression式分割而不是String.split因为我将处理Linux \n和Windows \r\n行尾。

 arrayOfLines = lineString.match(/[^\r\n]+/g); 

正如蒂姆所说,这是完全匹配和捕捉。 它似乎regex.exec(string)返回查找第一个匹配,无论全局修饰符, string.match(regex)是全球性的。

使用

 result = subject.split(/\r?\n/); 

你的正则expression式返回行1两次,因为行1是整个匹配第一个捕获组的内容。

我假设以下构成换行符

  1. \ r之后是\ n
  2. \ n后面跟着\ r
  3. \ n单独存在
  4. \ r独自一人

请用

 var re=/\r\n|\n\r|\n|\r/g; arrayofLines=lineString.replace(re,"\n").split("\n"); 

包括空行的所有行的数组。

要么

请用

 arrayOfLines = lineString.match(/[^\r\n]+/g); 

对于非空行的数组

甚至更简单的正则expression式处理所有行结束组合,甚至混合在同一个文件中,并删除空行:

var lines = text.split(/[\r\n]+/g);

随着空白修剪:

var lines = text.trim().split(/\s*[\r\n]+\s*/g);

首先用\r\nreplace\r\n \n然后用 String.split

http://jsfiddle.net/uq55en5o/

var lines = text.match(/^.*((\r\n|\n|\r)|$)/gm);

我做了这样的事情。 以上链接是我的小提琴。