Соответствие только начальному якорю многострочной строки

var s = "1. TLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, \

2.  quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse \

3. whatever..."

s.replace('/^\d\.\s+/gm','</li><li>')

Я пытаюсь преобразовать структуру списка, скопированную из MS Word, в список HTML. Я знаю, что ^ может соответствовать якорю «начало строки», регулярное выражение /^\d\.\s+/gm будет соответствовать каждой новой строке. Но мне нужно отличить самую первую новую строку, которая является уникальной привязкой «начало всей строки», то есть заменить первое совпадение /^\d\.\s+/ на <ol><li>, есть ли какой-либо общий способ сделать это?


person shenkwen    schedule 15.05.2015    source источник
comment
Вы используете javascript?   -  person kasravnd    schedule 15.05.2015


Ответы (2)


Не создавайте HTML путем объединения строк. Это небезопасно (подумайте о специальных символах и XSS).

Как насчет:

var s = "1. TLorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, \n\
\n\
2.  quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse \n\
\n\
3. whatever..."

var ul = document.createElement("UL");

s.replace(/^\s*$\n/gm, "").split(/\n/g).map(function (txt) {
    var li = document.createElement("LI");
    li.textContent = txt.replace(/^\s+|\s+$/g, "");
    return li;
}).forEach(function (li) {
    ul.appendChild(li);
});

Если вы не хотите создавать элементы DOM вручную, используйте одну из готовых библиотек шаблонов HTML (например, Handlebars).

person Tomalak    schedule 15.05.2015

Вы можете использовать группу захвата, чтобы поместить строку между 2 \d. или \d\. и концом строки с </li>$1<li> (поместите первую группу между тегом списка):

s.replace('/^\d\.(.+)(\d\.|$)/gm','/</li>$1<li>/')
person kasravnd    schedule 15.05.2015