如何在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++;
有三个选项:
使用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;