如何在javascript中计算一个string的行数

我想要计算一个string中的行数

我试图用这个stackoverflow的答案:

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

在这个string(最初是一个缓冲区):

  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 

出于某种原因,我得到了线='1'。

任何想法如何使其工作?

使用正则expression式可以将行数计为

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

或者你也可以尝试下面的分割方法。

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

工作解决scheme: http : //jsfiddle.net/C8CaX/

嗯,是的…你在做什么是绝对错误的。 当你说str.split("\r\n|\r|\n")它会尝试find确切的string"\r\n|\r|\n" 。 那就是你错了的地方。 整个琴弦没有这样的发生。 你真正想要的是David Hedlund的build议:

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

原因在于split方法不会将string转换为JavaScript中的正则expression式。 如果你想使用正则expression式,使用正则expression式。

要使用正则expression式使用/.../

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

另一个比拆分短的,性能更高的解决scheme是:

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

这是工作样品小提琴

只要删除其他\ r \ n和“|” 从你的前例如

我做了一个性能testing比较拆分与正则expression式,一个string,并做一个for循环。

看来for循环是最快的。

注意:这个代码“原样”是没有用的Windows或马科斯endline,但应该可以比较性能。

用string拆分:

 split('\n').length; 

用正则expression式拆分:

 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

有三个选项:

使用jQuery(从jQuery网站下载) – jquery.com

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

使用正则expression式

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

或者,每个循环的娱乐

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