【问题标题】:regex to replace "<p><br/></p>" string with empty string- Javascript [duplicate]正则表达式用空字符串替换“<p><br/></p>”字符串-Javascript [重复]
【发布时间】:2021-12-02 06:12:49
【问题描述】:

我有一些 HTML 作为字符串

var str= "<p><br/></p>"

如何使用 JS 从这个字符串中去除 p 标签。 这是我迄今为止尝试过的:

str.replace(/<p[^>]*>(?:\s|&nbsp;)*<\/p>/, "") // o/p: <p><br></p>'
str.replace("/<p[^>]*><\\/p[^>]*>/", "")// o/p: <p><br></p>'
str.replace(/<p><br><\/p>/g, "")// o/p: <p><br></p>'

它们都返回与上面相同的 str,预期的 o/p 是: str 应该是"" 我在这里做错了什么?

谢谢

【问题讨论】:

  • 你能阻止违规字符串被添加到 HTML 中,这样你就不需要尝试删除它了吗?
  • 我正在使用 React Quill 组件,并且该组件添加了此值,我不确定是否可以在不触摸组件的情况下阻止。此时我最好的方法是删除空标签和
    标签
  • 也许你应该屏蔽所有箭头 \&lt;\&gt;
  • 但这不是一个 empty

    标签。它有一个
    标签。 ??

  • 我的意思是为我们定义什么应该被删除和什么应该被删除一样重要。输入和预期输出的一个示例几乎没有告诉我们任何信息——尤其是当有矛盾的文本解释支持它是一个 empty 标记(它不是)时。请更好地定义问题。

标签: javascript html regex


【解决方案1】:

您可能不应该使用 RegExp 来解析 HTML - 它对于 (X)HTML 样式的标记(如 there are way too many edge cases.)并不是特别有用

而是像解析 DOM 中的元素一样解析 HTML,然后将每个 &lt;p&gt;trim()med innerText 值与空白字符串进行比较,然后删除相等的值:

var str = "<p><br/></p><p>This paragraph has text</p>"
var ele = document.createElement('body');
ele.innerHTML = str;
[...ele.querySelectorAll('p')].forEach(para => {
  if (para.innerText.trim() === "") ele.removeChild(para);
});

console.log(ele.innerHTML);

【讨论】:

    【解决方案2】:

    您应该能够使用以下表达式:&lt;p[^&gt;]*&gt;(&amp;nbsp;|\s+|&lt;br\s*\/?&gt;)*&lt;\/p&gt;

    上面的表达式查看包含在 &lt;p&gt;...&lt;/p&gt; 中的表达式,并将它们与 &amp;nbsp;、空格 (\s+) 和 &lt;br&gt;(以及 / 变体)进行匹配。

    我认为您大部分时间都与/&lt;p[^&gt;]*&gt;(?:\s|&amp;nbsp;)*&lt;\/p&gt;/ 在一起,但您只需要删除?:(不确定您在此处尝试做什么),并为&lt;br&gt; 添加一个额外的案例。

    const str = `
    <p><br></p>
    <p><br/></p>
    <p><br /></p>
    <p> <br/> </p>
    <p> </p>
    <p>&nbsp; </p>
    <p><br/> &nbsp;</p>
    <p>
      <br>
    </p><!-- multiline -->
    <p><br/> don't replace me</p>
    <p>don't replace me</p>
    `;
    
    const exp = /<p[^>]*>(&nbsp;|\s+|<br\s*\/?>)*<\/p>/g;
    
    console.log(str.replace(exp, ''));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 2023-04-09
      • 2016-02-27
      相关资源
      最近更新 更多