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列表。我知道^
可以匹配&#39;字符串的开头&#39;锚,他的正则表达式/^\d\.\s+/gm
将匹配每一个新的行。但我需要区分第一个新行,即整个字符串的唯一开头#34;锚,a.k.a将/^\d\.\s+/
的第一个匹配替换为<ol><li>
,有没有通用的方法可以做到这一点?
答案 0 :(得分: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)。
答案 1 :(得分:0)
您可以使用捕获组将字符串放在2 \d.
或\d\.
和字符串末尾</li>$1<li>
之间(将第一个组放在list标记之间):
s.replace('/^\d\.(.+)(\d\.|$)/gm','/</li>$1<li>/')