Разбить строку в JavaScript по строкам, сохранив переводы строки? - PullRequest
1 голос
/ 02 февраля 2012

Как бы я разбил строку JavaScript, такую ​​как foo\nbar\baz, на массив строк, сохранив при этом новые строки? Я хотел бы получить ['foo\n', 'bar\n', 'baz'] в качестве вывода;

Я знаю, что существует множество возможных ответов - мне просто интересно найти стильный.

С perl я бы использовал утверждение нулевой ширины с обратным утверждением : split /(?<=\n)/, но они не поддерживаются в регулярных выражениях javascript.

PS. Дополнительные точки для обработки различных концов строки (по крайней мере \r\n) и обработки пропущенного последнего символа новой строки (как в моем примере).

Ответы [ 4 ]

5 голосов
/ 03 февраля 2012

Вы можете выполнить глобальное совпадение с этим шаблоном: /[^\n]+(?:\r?\n|$)/g

Соответствует любому не символу новой строки, затем соответствует необязательному \r, за которым следует \n или конец строки.

var input = "foo\r\n\nbar\nbaz";
var result = input.match(/[^\n]+(?:\r?\n|$)/g);

Результат: ["foo\r\n", "bar\n", "baz"]

2 голосов
/ 03 февраля 2012

как насчет этого?

"foo\nbar\nbaz".split(/^/m);

Результат

["foo
", "bar
", "baz"]
0 голосов
/ 03 февраля 2012

Я бы держался подальше от split с регулярными выражениями, поскольку в IE его реализация не удалась.Вместо этого используйте match.

'foo\n\bar\n\baz".match(/^.*(\r?\n|$)/mg)

Результат: ["foo\n", "bar\n", "baz"]

0 голосов
/ 02 февраля 2012

Один простой, но грубый метод был бы первым, чтобы заменить "\ n" на 2 специальных символа.Разделите на второй и замените первый на «\ n» после разделения.Не эффективно и не элегантно, но определенно работает.

...