Как подсчитать количество строк строки в 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'.
любая идея, как заставить ее работать?
Ответы
Ответ 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;