如果它是html标记,则替换段落标记之间的任何内容

时间:2017-06-12 09:43:24

标签: javascript regex

我需要从正在粘贴到html textarea中的字符串中删除空段落。我有这个作为正则表达式。

var reg = /\<p( [a-zA-Z]*=((\"[^\"]*\")|(\'[^\']*\')))*\>\<\/p\>/g;

它运作正常。但是,一些被粘贴的数据包含看起来像这样的段落。

<p><b></b></p>

因此正则表达式不起作用 - 因为段落虽然不包含实际文本,但确实包含html标记。

现在有人可以告诉我修改我的正则表达式,这样它不仅会替换没有空字符串的内容的段落,而且还会替换唯一内容为html标记的段落。

目前这样的文字。

<p style="margin:0px;"></p>
<p>Fred</p>
<p style="margin-left:10px;"></p>
<p><b></b></p>
<p>Jim</p>

正在修改,因此它变为

<p>Fred></p>
<p><b></b></p>
<p>Jim</p>

我需要它成为

<p>Fred</p>
<p>Jim</p>

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

<p[^>]*>(?:\s*<(\w+)>\s*<\/\1>\s*|\s*)<\/p>

并替换为空

Regex Demo

const regex = /<p[^>]*>(?:\s*<(\w+)>\s*<\/\1>\s*|\s*)<\/p>/g;
const str = `<p style="margin:0px;"></p>
<p>Fred</p>
<p style="margin-left:10px;"></p>
<p><b></b></p>
<p>Jim</p>`;
const subst = ``;
const result = str.replace(regex, subst);

console.log(result);