文字列の行数をカウントしたい
私はこの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'になりました。
それを機能させる方法はありますか?
正規表現を使用すると、行数を次のようにカウントできます。
str.split(/\r\n|\r|\n/).length
または、次のように分割方法を試すことができます。
var lines = $("#ptest").val().split("\n");
alert(lines.length);
実用的なソリューション: http://jsfiddle.net/C8CaX/
分割よりも潜在的にパフォーマンスが高い別の短いソリューションは次のとおりです。
const lines = (str.match(/\n/g) || '').length + 1
正規表現を使用して分割するには、/.../
lines = str.split(/\r\n|\r|\n/);
うーん...あなたがやっていることは絶対に間違っています。 str.split("\r\n|\r|\n")
と言うと、正確な文字列"\r\n|\r|\n"
。それはあなたが間違っているところです。文字列全体にこのような発生はありません。本当に欲しいのは、デビッド・ヘドランドが提案したことです:
lines = str.split(/\r\n|\r|\n/);
return lines.length;
その理由は、splitメソッドはJavaScriptで文字列を正規表現に変換しないからです。正規表現を使用する場合は、正規表現を使用します。
文字列を使用して分割を正規表現と比較し、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++;
次の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;
これが作業サンプルです fiddle
追加の\ r\nと「|」を削除するだけですあなたの元から。
<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;