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