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是整个匹配和第一个捕获组的内容。
我假设以下构成换行符
- \ r之后是\ n
- \ n后面跟着\ r
- \ n单独存在
- \ 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\n
replace\r\n
\n
, 然后用 String.split
。
var lines = text.match(/^.*((\r\n|\n|\r)|$)/gm);
我做了这样的事情。 以上链接是我的小提琴。