Javascript 包装列表项标记<;李></李>;使用<;ul>;标签

Javascript 包装列表项标记<;李></李>;使用<;ul>;标签,javascript,regex,Javascript,Regex,我正在尝试构建一个工具,用HTML标记文本,而不需要手动操作 目前,该工具将文本复制到富文本编辑器中,并在使用一系列.replace regex模式清理一些常见问题后输出HTML 我似乎无法解决的一个问题是转换从MS word粘贴的列表。以下是word中的内容: <p>·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lorem Ipsum dolores.</p&g

我正在尝试构建一个工具,用HTML标记文本,而不需要手动操作

目前,该工具将文本复制到富文本编辑器中,并在使用一系列.replace regex模式清理一些常见问题后输出HTML

我似乎无法解决的一个问题是转换从MS word粘贴的列表。以下是word中的内容:

<p>·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lorem Ipsum dolores.</p>
<p>·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lorem Ipsum dolores.</p>
<p>·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lorem Ipsum dolores.</p>
<p>·&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Lorem Ipsum dolores.</p>
Lorem Ipsum dolores

·洛雷姆·伊普苏姆·多洛雷斯

·洛雷姆·伊普苏姆·多洛雷斯

·洛雷姆·伊普苏姆·多洛雷斯

我能够通过正则表达式转换它,这样每个都用一个列表项进行包装,但我不知道如何将列表项包装在无序的列表标记中

例如,我想改变一下

<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
  • 进入

    我无法使正则表达式匹配。以下是我正在使用的:

    .replace(/(?<!<\/li>)<li>/, "<ul><li>")
    
    。替换(/(?)
  • /,“
    • ”)
  • 试试这个:

    test.replace(/<li>[\s\S]*<\/li>/g, function(x){ return "<ul>"+x+"</ul>";})
    
    test.replace(/
  • [\s\s]*/g,函数(x){返回“
      ”+x+”
    ”;})
  • 下面是一段代码,展示了它是如何工作的:

    var test=`sdf df s
    自卫队
    
  • sdsfdsfsd`;
    log(test.replace(/
  • [\s\s]*/g,函数(x){return“
      ”+x+”
    ”;}))
  • 带有HTML的RegExps通常是个坏主意。我个人会使用DOMParser并用DOM方法修改HTML。如果您只有一组lis,那么只需选择它们并将其附加到UL即可

    var str=`
    
  • ` var parser=新的DOMParser(); var doc=parser.parseFromString(str'text/html') var body=doc.querySelector('body') var lis=doc.queryselectoral('li')) var ul=document.createElement('ul') body.insertBefore(ul,lis[0]) li.forEach(li=>ul.appendChild(li))
    console.log(doc.querySelector('body').innerHTML)
    这是否回答了您的问题@Dpuiattiv是的。@Dpuiatti是的,不应使用正则表达式来解析HTML。你能提供更多关于你的特殊情况的信息以及你为什么要这样做,也许我们可以提供一个替代的解决方案吗?你可以尝试
    。用
    (?:[\r\n]+
  • *)*$/gm,
      \n$&\n
  • 来代替(
    [\s\s]*
    )来代替渴望的正则表达式。
    
    test.replace(/<li>[\s\S]*<\/li>/g, function(x){ return "<ul>"+x+"</ul>";})