web-dev-qa-db-ja.com

javascriptで文字列の行数を数える方法

文字列の行数をカウントしたい

私はこのstackoverflow答えを使用しようとしました:

lines = str.split("\r\n|\r|\n"); 
return  lines.length;

この文字列(元はバッファでした):

 GET / HTTP/1.1
 Host: localhost:8888
 Connection: keep-alive
 Cache-Control: max-age=0
 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.2 (KHTML,like Gecko) Chrome/15.0.874.121 Safari/535.2
 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
 Accept-Encoding: gzip,deflate,sdch
 Accept-Language: en-US,en;q=0.8
 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

何らかの理由でlines = '1'にな​​りました。

それを機能させる方法はありますか?

65
Itzik984

正規表現を使用すると、行数を次のようにカウントできます。

 str.split(/\r\n|\r|\n/).length

または、次のように分割方法を試すことができます。

var lines = $("#ptest").val().split("\n");  
alert(lines.length);

実用的なソリューション: http://jsfiddle.net/C8CaX/

112
Pavan

分割よりも潜在的にパフォーマンスが高い別の短いソリューションは次のとおりです。

const lines = (str.match(/\n/g) || '').length + 1
23
ngryman

正規表現を使用して分割するには、/.../

lines = str.split(/\r\n|\r|\n/); 
9
David Hedlund

うーん...あなたがやっていることは絶対に間違っています。 str.split("\r\n|\r|\n")と言うと、正確な文字列"\r\n|\r|\n"。それはあなたが間違っているところです。文字列全体にこのような発生はありません。本当に欲しいのは、デビッド・ヘドランドが提案したことです:

lines = str.split(/\r\n|\r|\n/);
return lines.length;

その理由は、splitメソッドはJavaScriptで文字列を正規表現に変換しないからです。正規表現を使用する場合は、正規表現を使用します。

9
Aadit M Shah

文字列を使用して分割を正規表現と比較し、forループで実行するパフォーマンステストを行いました。

Forループが最速のようです。

注:このコードは「そのまま」ウィンドウやmacosのエンドラインには有用ではありませんが、パフォーマンスを比較するのには問題ありません。

文字列で分割:

split('\n').length;

正規表現で分割:

split(/\n/).length;

次を使用して分割:

var length = 0;
for(var i = 0; i < sixteen.length; ++i)
  if(sixteen[i] == s)
    length++;

http://jsperf.com/counting-newlines/2

5
jperelli

次の3つのオプションがあります。

JQueryの使用( jQuery Webサイト からダウンロード)-jquery.com

var lines = $("#ptest").val().split("\n");
return lines.length;

正規表現を使用する

var lines = str.split(/\r\n|\r|\n/);
return lines.length;

または、for eachループの再作成

var length = 0;
for(var i = 0; i < str.length; ++i){
    if(str[i] == '\n') {
        length++;
    }
}
return length;
3
Joe

これが作業サンプルです fiddle

追加の\ r\nと「|」を削除するだけですあなたの元から。

1
Sandeep G B
 <script type="text/javascript">
      var multilinestr = `
        line 1
        line 2
        line 3
        line 4
        line 5
        line 6`;
      totallines = multilinestr.split("\n");
lines = str.split("\n"); 
console.log(lines.length);
</script>

それは私の場合はうまくいきます

より良い解決策は、str.split( "\ n")関数がstr.match(/\n\g)よりも重い "\ n"で分割された文字列の新しい配列を作成するためです。 str.match(/\n\g)は、一致する要素のみの配列を作成します。これは「\ n」です。

var totalLines = (str.match(/\n/g) || '').length + 1;
0
hashed_name