Itz*_*984 66 javascript string split
我想计算一个字符串中的行数
我试图使用这个stackoverflow答案:
lines = str.split("\r\n|\r|\n");
return lines.length;
Run Code Online (Sandbox Code Playgroud)
在这个字符串(最初是一个缓冲区):
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
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我得到了行='1'.
任何想法如何让它工作?
Pav*_*van 117
使用正则表达式,您可以将行数计为
str.split(/\r\n|\r|\n/).length
Run Code Online (Sandbox Code Playgroud)
或者,您可以尝试拆分方法,如下所示.
var lines = $("#ptest").val().split("\n");
alert(lines.length);
Run Code Online (Sandbox Code Playgroud)
工作解决方案:http://jsfiddle.net/C8CaX/
ngr*_*man 24
另一个简短,更高效的解决方案是:
const lines = (str.match(/\n/g) || '').length + 1
Run Code Online (Sandbox Code Playgroud)
嗯,是的......你所做的是绝对错误的.当你说它str.split("\r\n|\r|\n")会试图找到确切的字符串"\r\n|\r|\n".那就是你错了.在整个字符串中没有这样的出现.你真正想要的是David Hedlund建议的:
lines = str.split(/\r\n|\r|\n/);
return lines.length;
Run Code Online (Sandbox Code Playgroud)
原因是split方法不会将字符串转换为JavaScript中的正则表达式.如果要使用正则表达式,请使用正则表达式.
我进行了性能测试,比较了使用正则表达式,字符串和使用for循环进行的拆分。
似乎for循环是最快的。
注意:此代码“原样”对Windows或macOS终端线都没有用,但可以比较性能。
用字符串分割:
split('\n').length;
Run Code Online (Sandbox Code Playgroud)
用正则表达式拆分:
split(/\n/).length;
Run Code Online (Sandbox Code Playgroud)
拆分用于:
var length = 0;
for(var i = 0; i < sixteen.length; ++i)
if(sixteen[i] == s)
length++;
Run Code Online (Sandbox Code Playgroud)
http://jsperf.com/counting-newlines/2