How do you split a long piece of text into separate lines? Why does this return line1 twice?
/^(.*?)$/mg.exec('line1\r\nline2\r\n');
["line1", "line1"]
I turned on the multi-line modifier to make ^
and $
match beginning and end of lines. I also turned on the global modifier to capture all lines.
I wish to use a regex split and not String.split
because I'll be dealing with both Linux \n
and Windows \r\n
line endings.
Even simpler regex that handles all line ending combinations, even mixed in the same file, and removes empty lines as well:
var lines = text.split(/[\r\n]+/g);
With whitespace trimming:
var lines = text.trim().split(/\s*[\r\n]+\s*/g);
First replace all
\r\n
with\n
, thenString.split
.I am assuming following constitute newlines
Please Use
for an array of all Lines including the empty ones.
OR
Please Use
For an array of non empty Lines
As Tim said, it is both the entire match and capture. It appears
regex.exec(string)
returns on finding the first match regardless of global modifier, wherasstring.match(regex)
is honouring global.Use
Your regex returns
line1
twice becauseline1
is both the entire match and the contents of the first capturing group.http://jsfiddle.net/uq55en5o/
var lines = text.match(/^.*((\r\n|\n|\r)|$)/gm);
I have done something like this. Above link is my fiddle.