Разделить текст заголовком - PullRequest
0 голосов
/ 11 июня 2018

У меня есть строка, подобная этой:

&topic1
Lorem ipsum dolor sit amet, consectetur adipiscing elit, 
sed do 
eiusmod tempor incididunt ut 

&topic2
labore et dolore magna aliqua. Ut enim ad minim 
www.example.com/test?id=1&name=abc
veniam, quis nostrud exercitation ullamco lab

&topic3
hello

Каждый раз, когда есть (beginning of line) + & + name + \n, он должен быть разобран в новый элемент.

Как наиболее естественноспособ разобрать его таким образом с помощью Javascript:

[['topic1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit,\nsed do\neiusmod tempor incididunt ut'],
 ['topic2', 'labore et dolore magna aliqua. Ut enim ad minim\nwww.example.com/test?id=1&name=abc\nveniam, quis nostrud exercitation ullamco lab'],
 ['topic3', 'hello']]

?

У меня есть несколько проблем с этим методом:

var s = "&topic1\nLorem ipsum dolor sit amet, consectetur adipiscing elit,\nsed do\neiusmod tempor incididunt ut\n\n&topic2\nlabore et dolore magna aliqua. Ut enim ad minim\nwww.example.com/test?id=1&name=abc\nveniam, quis nostrud exercitation ullamco lab\n\n&topic3\nhello";

s.split('&').forEach(function(elt) { console.log(elt.split('\n')[0], elt.split('\n').slice(1)); });
  • первый элемент пуст (его можно удалить после, но, может быть, есть более чистый способ?)

  • если & находится в середине строки (а не в начале), тогда этот код не работает

  • Я хотел бы, чтобы текст после заголовка заголовкабыть в одной единственной строке (например, Lorem ipsum dolor sit amet, consectetur adipiscing elit,\nsed do\neiusmod tempor incididunt ut) и не разбиваться на каждую \n

Как сделать более чистый анализ?

1 Ответ

0 голосов
/ 11 июня 2018

Сначала разделите на разрывы строк, затем присоединяйтесь к ним, пока не найдете новую тему:

var s = "&topic1\nLorem ipsum dolor sit amet, consectetur adipiscing elit,\nsed do\neiusmod tempor incididunt ut\n\n&topic2\nlabore et dolore magna aliqua. Ut enim ad minim\nwww.example.com/test?id=1&name=abc\nveniam, quis nostrud exercitation ullamco lab\n\n&topic3\nhello";

const result = [];
let acc = [];

for(const line of s.split("\n")) {
  if(line[0] === "&") {
    // New topic found
    result.push(acc);
    acc = [line.substr(1), ""];
  } else {
    acc[1] += (acc[1] && "\n") + line;
  }
}

result.push(acc);
result.shift();   // removes the first element from an array and returns that removed element
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...