0
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+/with <ol><li>,有什么通用的方法可以做到这一点吗?

4

2 回答 2

1

不要通过连接字符串来构建 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)。

于 2015-05-15T20:01:51.643 回答
0

您可以使用捕获组将字符串放在 2\d.或字符串的\d\.结尾之间</li>$1<li>(将第一个组放在列表标记之间):

s.replace('/^\d\.(.+)(\d\.|$)/gm','/</li>$1<li>/')
于 2015-05-15T19:58:18.420 回答