Как подсчитать количество строк строки в 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 ответов:
используя регулярное выражение, Вы можете подсчитать количество строк как
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
Хм да... то, что ты делаешь, абсолютно неправильно. Когда вы говорите
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++;
вот рабочий пример скрипка
просто удалите дополнительные \r\n и "|" из вашего reg ex.