JS регулярное выражение для разделения по строке
Как вы разделите длинный фрагмент текста на отдельные строки? Почему это возвращает строку1 дважды?
/^(.*?)$/mg.exec('line1\r\nline2\r\n');
[ "line1", "line1" ]
Я включил многострочный модификатор, чтобы сделать ^
и $
совпадение начала и конца строк. Я также включил глобальный модификатор для захвата всех строк.
Я хочу использовать разделение регулярных выражений, а не String.split
, потому что я буду иметь дело с окончанием строки Linux \n
и Windows \r\n
.
Ответы
Ответ 1
arrayOfLines = lineString.match(/[^\r\n]+/g);
Как сказал Тим, это как полный матч, так и захват. Похоже, что regex.exec(string)
возвращается к поиску первого совпадения независимо от глобального модификатора, если string.match(regex)
выполняет глобальную проверку.
Ответ 2
Использование
result = subject.split(/\r?\n/);
Ваше регулярное выражение возвращает line1
дважды, потому что line1
- это как полное совпадение, так и содержимое первой группы захвата.
Ответ 3
Я предполагаю, что следующие символы newlines
- \r, за которым следует \n
- \n, за которым следует \r
- \n присутствует отдельно
- \r присутствует отдельно
Используйте
var re=/\r\n|\n\r|\n|\r/g;
arrayofLines=lineString.replace(re,"\n").split("\n");
для массива всех строк, включая пустые.
ИЛИ
Используйте
arrayOfLines = lineString.match(/[^\r\n]+/g);
Для массива непустых строк
Ответ 4
Еще более простое регулярное выражение, которое обрабатывает все комбинации строк, даже смешанные в одном файле, и удаляет также и пустые строки:
var lines = text.split(/[\r\n]+/g);
С прорисовкой пробелов:
var lines = text.trim().split(/\s*[\r\n]+\s*/g);
Ответ 5
Сначала замените все \r\n
на \n
, затем String.split
.
Ответ 6
http://jsfiddle.net/uq55en5o/
var lines = text.match(/^.*((\r\n|\n|\r)|$)/gm);
Я сделал что-то вроде этого. Над ссылкой моя скрипка.