获取UL标签中的所有P标签,Javascript Regex

时间:2017-01-11 11:49:31

标签: javascript regex

我正绞尽脑汁试图找出一个正则表达式。我有以下无效的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...

2 个答案:

答案 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();
    ....
})