Если у вас есть контроль над бэкэндом, вы должны отправить эти данные в формате JSON. Это было бы лучшим выбором. Это также относительно безболезненно. Вам также не следует использовать для этого jQuery (его использование здесь довольно неактуально), если только вы не использовали AJAX для получения JSON, как я описал.
Или вы можете сделать что-то вроде этого:
var str = "Header 1\none\ntwo\nthree\n\nHeader 2\nsubheader - one\ntwo\nthree\n\nHeader 3\none\ntwo\nthree\n";
var lines = str.split(/\n/);
var headerMap = {};
var currentHeader = "";
for(var i = 0; i < lines.length; i++) {
var line = lines[i];
line = line.replace(/^\s+/, "").replace(/\s+$/, ""); //trim whitespace
if(/^Header [0-9]+$/.test(line) && line != currentHeader) {
headerMap[line] = new Array();
currentHeader = line;
}
//don't add blank lines
if(line != "") {
headerMap[currentHeader][headerMap[currentHeader].length] = line;
}
}
Теперь у вас есть карта с ключами Header 1
и Header 2
и так далее. Значением для каждого ключа является массив, который содержит различные подзаголовки. Вы можете легко перебрать эти значения и проверить самое первое значение в массиве, чтобы увидеть, имеет ли оно префикс subheader -
. Если нет, вы можете добавить его.
Я только что заметил вторую часть. Я думаю, что вы можете сделать после того, как вы сделаете выше, это сделать второй проход, разобрать части reference
и вставить туда соответствующие значения. Я думаю, что решение Слака может быть однопроходным (из краткого описания, которое я дал). ИЛИ вы можете добавить else-if
к приведенному выше коду (внутри цикла, где он проверяет хедера), чтобы проверить и проверить, соответствует ли оно вашей директиве reference
. Если это так, возьмите существующую ссылку и добавьте к ней то, что у вас есть (это работает только для обратных ссылок). Если у вас есть прямые ссылки, вам понадобится второй проход.