121 Stimmen

Wie man die Anzahl der Zeilen eines Strings in Javascript zählt

Ich möchte die Anzahl der Zeilen in einer Zeichenkette zählen. Ich habe versucht, diese Stackoverflow-Antwort zu verwenden,

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

auf diese Zeichenfolge (die ursprünglich ein Puffer war):

 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

und, aus irgendeinem Grund, bekam ich lines='1' .

Haben Sie eine Idee, wie das funktionieren kann?

193voto

Pavan Punkte 4049

Mit einem regulären Ausdruck können Sie die Anzahl der Zeilen wie folgt zählen

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

Alternativ können Sie auch die unten beschriebene Split-Methode anwenden.

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

funktionierende Lösung: http://jsfiddle.net/C8CaX/

80voto

ngryman Punkte 6164

Eine andere kurze Lösung, die möglicherweise leistungsfähiger ist als Split, ist:

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

11voto

David Hedlund Punkte 125085

Zum Aufteilen mit einer Regex verwenden Sie /.../

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

11voto

Aadit M Shah Punkte 70322

Hmm ja... was Sie tun, ist absolut falsch. Wenn Sie sagen str.split("\r\n|\r|\n") wird versucht, die genaue Zeichenfolge zu finden "\r\n|\r|\n" . Das ist der Punkt, an dem Sie sich irren. In der gesamten Zeichenkette gibt es kein solches Vorkommen. Was Sie wirklich wollen, ist das, was David Hedlund vorgeschlagen hat:

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

Der Grund dafür ist, dass die Split-Methode in JavaScript keine Zeichenketten in reguläre Ausdrücke umwandelt. Wenn Sie einen Regexp verwenden wollen, verwenden Sie einen Regexp.

8voto

jperelli Punkte 6531

Ich habe einen Leistungstest gemacht, der Split mit Regex, mit einem String und mit einer for-Schleife vergleicht.

Es scheint, dass die for-Schleife am schnellsten ist.

HINWEIS: Dieser Code ist in seiner jetzigen Form weder für Windows- noch für Macos-Endlines geeignet, sollte aber zum Leistungsvergleich genügen.

Split mit String:

split('\n').length;

Split mit Regex:

split(/\n/).length;

Geteilte Verwendung für:

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X