web-dev-qa-db-ja.com

行で分割するJS正規表現

長いテキストを別々の行に分割するにはどうしますか?これがline1を2回返すのはなぜですか?

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

["line1"、 "line1"]

^$が行の先頭と末尾に一致するように複数行修飾子をオンにしました。 all行をキャプチャするためにグローバル修飾子もオンにしました。

Linux String.splitとWindows \nの両方の行末を扱うので、\r\nではなく正規表現の分割を使用したいと思います。

65
JoJo
_arrayOfLines = lineString.match(/[^\r\n]+/g);
_

ティムが言ったように、それは全体の一致とキャプチャの両方です。 regex.exec(string)はグローバル修飾子に関係なく最初の一致を見つけると戻りますが、string.match(regex)はグローバルを尊重します。

125
ReactiveRaven

つかいます

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

line1は両方とも完全に一致するため、正規表現はline1を2回返しますおよび最初のキャプチャグループの内容。

90
Tim Pietzcker

私は以下が改行を構成すると仮定しています

  1. \ rの後に\ nが続く
  2. \ nに続いて\ r
  3. \ n単独で存在
  4. 単独で存在

使ってください

var re=/\r\n|\n\r|\n|\r/g;

arrayofLines=lineString.replace(re,"\n").split("\n");

空の行を含むすべての行の配列。

[〜#〜]または[〜#〜]

使ってください

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

空でない行の配列の場合

22
Arup Hore

すべての行末の組み合わせを処理し、同じファイルに混在し、空の行も削除する、より単純な正規表現:

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

空白のトリミングを使用:

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

19
ciscoheat

最初にすべて\r\n with \nその後String.split

7
Tim

http://jsfiddle.net/uq55en5o/

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

私はこのようなことをしました。上記のリンクは私のフィドルです。

0