Подтвердить что ты не робот

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

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

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

lines = str.split("\r\n|\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'.

любая идея, как заставить ее работать?

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Другое короткое, потенциально более эффективное, чем сплит, решение:

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

Ответ 3

Для разделения с использованием регулярного выражения /.../

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

Ответ 4

Хм, да... то, что ты делаешь, абсолютно неверно. Когда вы скажете str.split("\r\n|\r|\n"), он попытается найти точную строку "\r\n|\r|\n". Это где ты ошибаешься. Во всей строке нет такого появления. Что вы действительно хотите, так это то, что предложил Дэвид Хедлунд:

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

Причина заключается в том, что метод split не преобразует строки в регулярные выражения в JavaScript. Если вы хотите использовать регулярное выражение, используйте регулярное выражение.

Ответ 5

Существует три варианта:

Использование 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;

Ответ 6

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

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

ПРИМЕЧАНИЕ: этот код "как есть" бесполезен для окон и макроса, но должен быть в порядке для сравнения производительности.

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

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

Ответ 7

Вот рабочий пример fiddle

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

Ответ 8

Лучшее решение, так как функция str.split("\n") создает новый массив строк, разделенных на "\n", который тяжелее, чем str.match(/\n\g). str.match(/\n\g) создает массив только совпадающих элементов. Что в нашем случае "\n".

var totalLines = (str.match(/\n/g) || '').length + 1;