在关闭<p> </p>之前删除所有<br/>

时间:2015-02-06 05:11:09

标签: javascript jquery html regex

我想删除在结束<br>代码之前出现的所有</p>代码。

例如,这没关系:

<p>Bla bla bla <br>
bla bla
</p>

但这是确定:

<p>Bla bla bla <br>
</p>

换句话说,每次我都有:

<br> + white space or tab or new line or whatever providing no content + </p> 

然后,我想删除<br>

如何使用javascript Regex实现这一目标? (或任何其他JavaScript方式)

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作。如果br是最后一个孩子将其删除,则最后一个孩子的其他孩子为空,然后将其删除

$('p').find('br:last').filter(function () {
  return !this.nextSibling || (this.nextSibling.nodeType == 3 && !this.nextSibling.nextSibling && !this.nextSibling.nodeValue.trim())
}).remove()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<p>Bla bla bla
  <br/>bla bla
</p>

<p>Bla bla bla
  <br></p>

<p>Bla bla bla
  <br>
</p>

答案 1 :(得分:1)

试试这个:

遍历每个p
得到它的HTML(不是文本,以获得<br>元素),
使用正则表达式替换<br>为空字符串(在<br>之前匹配</p>) 用更新的html替换原始文件。

$('p').each(function(){
    var p = $(this);

    p.html(p.html().replace(/(<br)\s?\/?>\s?$/g,''));    

});

REGEX
/(<br)\s?\/?>\s?$/g匹配:<br>, <br/>, <br />, <br >

答案 2 :(得分:0)

正则表达式如下:

/<br>\s*<\/p>/g

首先表示"<br>" +任意空格或换行符+ "</p>"

然后我们使用str.match()。要删除<br>,我们将其替换为空字符串。请注意,test1test2执行时无法正常工作:

&#13;
&#13;
var test1 = "<p>Bla bla bla <br> \
bla bla \
</p>";

var test2 = "<p>Bla bla bla <br> \
</p>";

if(test1.match(/<br>\s*<\/p>/g))
    test1 = test1.replace("<br>","");

if(test2.match(/<br>\s*<\/p>/g))
    test2 = test2.replace("<br>","");

alert(test1); // <br> still there
alert(test2);// <br> is gone
&#13;
&#13;
&#13;