【问题标题】:How to remove inner text of HTML tag with HTML tag from a string using regex?如何使用正则表达式从字符串中删除带有 HTML 标记的 HTML 标记的内部文本?
【发布时间】:2014-08-11 17:04:28
【问题描述】:

我的字符串如下,

var str = "The test <del> SString </del> string , The other <del>textt </del> test&nbsp; string, <br/>  show &nbsp; something";

我可以编写只删除html标签的正则表达式模式,模式如下,

pattern = /(<([^>]+)>)/ig 

在 Str 变量中,可以有任何 html 标签,如粗体标签 (b)、斜体标签 (i)....等

如何在 jquery 或 javascript 中编写正则表达式模式,这将使用 html 标签删除 html 标签的内部文本。

其实结果会是,

“测试字符串,另一个测试字符串,显示一些东西”

【问题讨论】:

    标签: javascript jquery regex


    【解决方案1】:

    让它懒惰

    <([^>]+)>.*?<\/\1>|<.*?\/>
    

    这里是demo

    示例代码:

    var re = /<([^>]+)>.*?<\/\1>|<.*?\/>/g;
    var str = 'The test <del> SString </del> string , The other <del>textt </del> test&nbsp; string, <br/> show $nbsp; something\n\nThe test string , the other test string , show something';
    
    var result = str.replace(re, '');
    

    编辑

    注意:上面的正则表达式不支持带有属性的标签。

    尝试下面的正则表达式来覆盖标签中的任何属性。这是DEMO

    <([^( |>)]+)([^>]*)>.*?<\/\1>|<.*?\/>
    

    【讨论】:

    • 你的模式很好。你能删除   (空格)从字符串中使用正则表达式和你的模式。
    • 只需将其添加到正则表达式模式&amp;nbsp; 例如&lt;([^&gt;]+)&gt;.*?&lt;\/\1&gt;|&lt;.*?\/&gt;|&amp;nbsp;
    • 我的元素文本还包含样式定义,例如:

      Hi

      ,正则表达式不支持它,您能帮忙提供更好的正则表达式吗?
    • 答案&lt;([^&gt;]+)&gt;.*?&lt;\/\1&gt;|&lt;.*?\/&gt; 中提到的上述正则表达式是根据用户情况制作的。现在它只支持没有和属性的标签,因此它不适用于您的情况。
    • 这里是Demo 使用正则表达式解决您的用例&lt;([^( |&gt;)]+)([^&gt;]*)&gt;.*?&lt;\/\1&gt;|&lt;.*?\/&gt;
    【解决方案2】:

    这会奏效。

    var str = "The test <del> SString </del> string , The other <del>textt </del> test&nbsp; string, <br/>  show $nbsp; something";
    $a = $('<div>'+str+'</div>');
    $a.children().remove()
    var whatYouWant = $a.text();
    

    【讨论】:

      【解决方案3】:

      以下功能将帮助您,

      function getChildText(node) {
          var text = "";
          for (var child = node.firstChild; !! child; child = child.nextSibling) {
              if (child.nodeType === 3) {
                  text += child.nodeValue;
              }
          }
          return text;
      }
      

      Demo

      【讨论】:

        【解决方案4】:
        var str = "The test <del> SString </del> string , The other <del>textt </del> test&nbsp; string, <br/>  show $nbsp; something";
        

        你想要什么

        $("<div>"+str+"</div>").text()
        //result retun is: "The test  SString  string , The other textt  test  string,   show $nbsp; something"
        

        【讨论】:

        • 怎么可能?请检查代码,让我知道。此处仅将删除 HTML 标记。我需要用 HTML 标签删除 HTML 标签的内部文本。
        • 测试SString字符串,其他textt测试字符串,show $nbsp;什么”是你想要的?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-18
        • 2015-04-24
        • 2010-09-12
        • 2018-06-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多