我正绞尽脑汁试图找出一个正则表达式。我有以下无效的HTML:
...some html tags above...
<p>Bullet points:</p>
<ul>
<li/>
<p>point 1</p>
<li/>
<p>point 2</p>
</ul>
<p>Other Bullet points:</p>
<ul>
<li/>
<p>point 3</p>
<li/>
<p>point 4</p>
</ul>
...some html tags below...
我试图获取<p></p>
标记内的<ul></ul>
标记之间的所有数据,并将其替换为有效的li标记。即我打算用以下内容替换上面的内容:
...some html tags above...
<p>Bullet points:</p>
<ul>
<li>point 1</li>
<li>point 2</li>
</ul>
<p>Other Bullet points:</p>
<ul>
<li>point 3</li>
<li>point 4</li>
</ul>
...some html tags below...
答案 0 :(得分:2)
你应该为此做2个RegeXp,首先获取UL标签的内部HTML,然后用LI标签替换P标签。
首先获取所有UL
代码:
var UL_tags=/<ul>([\s\S]*?)<\/ul>/g
// [\s\S] Mean any char including new lines.
现在,您需要做的就是:
new_html=myHtml.replace(UL_tags,function(r0,innerHTML){
return innerHTML.replace(/<p>/g,'<ul>').replace(/<\/p>/g,'</ul>')
})
请注意,它不适用于嵌套的UL标签(UL内部的UL)
更新:现在,您需要支持UL内部的属性,例如:<ul class...>
所以我们需要忽略标记属性,因此Regexp需要稍微复杂一点(遗憾):
var UL_tags=/<ul[^>]*?>([\s\S]*?)<\/ul>/g
// [^>] Mean any char except closing tag.
答案 1 :(得分:0)
在jQuery中试试这个:
$('p').each(function(index){
p_str = $(this).text();
....
})