Зависит от того, что вы подразумеваете под линией. Для простого количества новых строк ответ Робусто подходит.
Если вы хотите узнать, сколько строк данных CSV, которые представляют, все может быть немного сложнее, так как само поле CSV может содержать новую строку:
field1,"field
two",field3
... - это одна строка, по крайней мере, в CSV, как определено в RFC4180 . (Это одна из отягчающих черт CSV, что существует так много нестандартных вариантов; сам RFC очень опоздал к игре.)
Так что, если вам нужно справиться с этим делом, вам придется по существу проанализировать каждое поле.
Поле может быть необработанным или (обязательно, если оно содержит \n
или ,
) в кавычках, с "
, представленным в двойных кавычках. Таким образом, регулярное выражение для одного поля будет:
"([^"]|"")*"|[^,\n]*
и так для всей строки (при условии, что она не пуста):
("([^"]|"")*"|[^,\n]*)(,("([^"]|"")*"|[^,\n]*))*\n
и узнать их количество:
var rowsn= csv.match(/(?:"(?:[^"]|"")*"|[^,\n]*)(?:,(?:"(?:[^"]|"")*"|[^,\n]*))*\n/g).length;
Если вам повезло иметь дело с вариантом CSV, который соответствует рекомендации RFC4180 об отсутствии символов "
в полях без кавычек, вы можете сделать это немного более читабельным. Разделите на новые строки, как и раньше, и посчитайте количество "
символов в каждой строке. Если это четное число, у вас есть полная линия; если это нечетное число, у вас есть разделение.
var lines= csv.split('\n');
for (var i= lines.length; i-->0;)
if (lines[i].match(/"/g).length%2===1)
lines.splice(i-1, 2, lines[i-1]+lines[i]);
var rowsn= lines.length;