長いテキストを別々の行に分割するにはどうしますか?これがline1を2回返すのはなぜですか?
/^(.*?)$/mg.exec('line1\r\nline2\r\n');
["line1"、 "line1"]
^
と$
が行の先頭と末尾に一致するように複数行修飾子をオンにしました。 all行をキャプチャするためにグローバル修飾子もオンにしました。
Linux String.split
とWindows \n
の両方の行末を扱うので、\r\n
ではなく正規表現の分割を使用したいと思います。
_arrayOfLines = lineString.match(/[^\r\n]+/g);
_
ティムが言ったように、それは全体の一致とキャプチャの両方です。 regex.exec(string)
はグローバル修飾子に関係なく最初の一致を見つけると戻りますが、string.match(regex)
はグローバルを尊重します。
つかいます
result = subject.split(/\r?\n/);
line1
は両方とも完全に一致するため、正規表現はline1
を2回返しますおよび最初のキャプチャグループの内容。
私は以下が改行を構成すると仮定しています
使ってください
var re=/\r\n|\n\r|\n|\r/g;
arrayofLines=lineString.replace(re,"\n").split("\n");
空の行を含むすべての行の配列。
[〜#〜]または[〜#〜]
使ってください
arrayOfLines = lineString.match(/[^\r\n]+/g);
空でない行の配列の場合
すべての行末の組み合わせを処理し、同じファイルに混在し、空の行も削除する、より単純な正規表現:
var lines = text.split(/[\r\n]+/g);
空白のトリミングを使用:
var lines = text.trim().split(/\s*[\r\n]+\s*/g);
最初にすべて\r\n
with \n
、その後String.split
。
var lines = text.match(/^.*((\r\n|\n|\r)|$)/gm);
私はこのようなことをしました。上記のリンクは私のフィドルです。