Как подсчитать количество строк строки в JavaScript


Я хочу подсчитать количество строк в строке

Я попытался использовать этот ответ stackoverflow:

lines = str.split("rn|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

и почему-то я получил строки='1'.

есть идеи, как заставить его работать?

7 55

7 ответов:

используя регулярное выражение, Вы можете подсчитать количество строк как

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

также вы можете попробовать разбить метод, как показано ниже.

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

рабочее решение:http://jsfiddle.net/C8CaX/

еще один короткий, более эффективный, чем сплит, решение:

const lines = (str.match(/\r?\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. Если вы хотите использовать регулярное выражение, используйте регулярное выражение.

есть три варианта:

С помощью jQuery (скачать с jQuery сайт) - jquery.com

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

С Помощью Regex

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

или, воссоздание a для каждого цикла

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

Я сделал тест производительности, сравнивая split с регулярным выражением, со строкой и делая это с циклом for.

кажется, что цикл for является самым быстрым.

Примечание: этот код "как есть" не полезен для Windows, ни macOS endline, но должен быть в порядке, чтобы сравнить производительность.

разделить строку:

split('\n').length;

разделить с регулярным выражением:

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

вот рабочий пример скрипка

просто удалите дополнительные \r\n и "|" из вашего reg ex.