【问题标题】:Javascript Regex Replace HTML TagsJavascript 正则表达式替换 HTML 标签
【发布时间】:2023-07-24 10:58:01
【问题描述】:

使用正则表达式有很多困难。

这就是我想要做的......

text<div> text </div><div> text </div><div> text </div>

把它变成

text<br> text<br>text<br>text

我已经尝试过...

newhtml = newhtml.replace(/\<div>/g,'<br>');
newhtml = newhtml.replace(/\</div>/g,' ');

但这给出了错误的输出。 jquery 是否提供了更好的方法来做到这一点?

【问题讨论】:

  • 你想只替换div标签,还是任何标签?
  • 只是
    文本

    text
  • 谁不把&lt;div&gt;换成&lt;br&gt;,把剩下的&lt;/div&gt;全部去掉?
  • 我的意思是,替换字符串文字,而不是使用正则表达式。 :)

标签: javascript jquery html regex


【解决方案1】:

那是因为你转义了错误的东西,因为只有反斜杠需要转义。

newhtml = newhtml.replace(/<div>/g,'<br>');
newhtml = newhtml.replace(/<\/div>/g,' ');

【讨论】:

    【解决方案2】:

    是的,你是对的,jQuery 确实提供了更好的方法。

    interesting read 首先。

    简单、优雅地解决您的具体问题。

    $('div').replaceWith(function(){
      return "<br>"+$(this).html();
    });​
    

    jsFiddle

    【讨论】:

      【解决方案3】:

      如果不需要,不要使用正则表达式;只需替换字符串文字。

      text.replace("<div>","<br>").replace("</div>","");
      

      注意:此解决方案完全适用于 this 场景,我通常不会反对使用正则表达式。

      【讨论】:

        【解决方案4】:

        这必须做的工作:

        text.replace(/(<\/?\w+?>)\s*?(<\/?\w+?>)|(<\/?\w+?>)/g,'<br>')
        

        虽然这只有在没有带有 &lt;div id="foo1"&gt; 等属性的标签时才有效 您不需要像在示例中那样转义 &lt;,而是需要转义 /

        【讨论】:

        • adiv>b/div>div>c/div>div>d/div> 这就是返回的内容
        【解决方案5】:

        执行此操作的简单方法如下:

        $('.container').html(function(i, html) {
            return html.replace(/<(|\/)div>/g, function(match) {
                return match == '<div>' ? '<br>' : '';
            });
        });
        

        /&lt;(|\/)div&gt;/:匹配 &lt;div&gt;&lt;/div&gt;

        demo

        注意.container 是放置 html 的位置。

        【讨论】:

          【解决方案6】:

          一个使用 JQuery 的 Liner

          newhtml = $(newhtml ).text().split(' ').join('<br/>');
          

          【讨论】:

            【解决方案7】:

            您可以使用简单的 RegExp 实现此目的

            output = inputText.replace(/&lt;\w{0,}\W{0,}&gt;|&lt;\W{0,}\w{1,}&gt;/ig, "With whatever you want it to be replaced with")

            或者你可以这样做

            String.prototype.replaceTags = function( replacementText )
            {      
                var x = new RegExp( "(" + replacementText + ")+" , "ig");
                return this
                       .replace( /<\w{0,}\W{0,}>|<\W{0,}\w{1,}>/ig, replacementText )
                       .replace( x, replacementText )  
            }
            

            然后直接在String上调用如下

            "text&lt;div&gt; text &lt;/div&gt;&lt;div&gt; text &lt;/div&gt;&lt;div&gt; text &lt;/div&gt;".replaceTags( "&lt;br&gt;" )

            你会得到这个——"text&lt;br&gt; text &lt;br&gt; text &lt;br&gt; text &lt;br&gt;"

            这将搜索字符串中以“”结束,则在“div/p/br”之间包含一些文本标签。当您不确定元素是大写还是小写时,忽略大小写会有所帮助。

            【讨论】: