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+/ます<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 に答える