Разбить строку шаблона на разрывы строк, игнорируя литерал \ n - PullRequest
0 голосов
/ 24 мая 2018

У меня есть несколько текстовых данных в несколько строк, которые хранятся в строке шаблона ES6.Любая строка может содержать буквальную строку \n.Пример:

`line1
same\nline2
line3`

Я хочу разбить эту строку на массив строк, где каждая строка начинается с строки строки шаблона, без разделения на литерал \n в строке.Итак, моим ожидаемым / желаемым результатом был массив JavaScript, выглядящий следующим образом: ["line1", "same\nline2", "line3"].

При рассмотрении примера ниже этого, очевидно, не происходит при простом расщеплении с использованием регулярного выражения для разрывов строк (/\n/).

Так это вообще возможно?Я что-то упускаю / неправильно понимаю, как работают строки шаблона?

const lines = `line1
same\nline2
line3`.split(/\n/);

document.getElementById('out').textContent = JSON.stringify(lines)

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вы можете использовать тег String.raw в литерале шаблона:

const lines = (String.raw `line1
same\nline2
line3`).split(/\n/);

console.log(lines);
0 голосов
/ 24 мая 2018

\n рассматривается как новая строка, и регулярное выражение всегда будет соответствовать ей.В вашей строке вы можете экранировать \n, например:

`line1
same\\nline2
line3`

Разделение на \n даст сейчас:

 ["line1", "same\nline2", "line3"]

Осторожно, что теперь \n - это просто строка, а неновая строка - но вы можете отобразить этот массив и заменить его на real новую строку.

["line1", "same\nline2", "line3"].map(value => value.replace(/\\n/g, "\n"))
...