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

Remove all <br> just before closing </p>

本文关键字:gt lt br 删除      更新时间:2023-09-26

我想删除在关闭</p>标记之前出现的任何<br>标记。

例如,这是可以的:

<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方式)

试试这个:

遍历每个p
获取其html(而不是文本,以便获取<br>元素),
使用regex(与</p>之前的<br>匹配的regex)将<br>替换为空字符串,
用更新后的html替换原始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 >

您可以执行以下操作。如果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>

正则表达式如下所示:

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

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

然后我们使用str.match()。为了删除<br>,我们将其替换为一个空字符串。请注意,test1不起作用,而test2起作用:

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