Javascript正则表达式替换HTML标记

时间:2012-08-23 11:36:17

标签: javascript jquery html regex

使用正则表达式时遇到很多困难。

继承人我想做的事情......

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是否提供了更好的方法呢?

7 个答案:

答案 0 :(得分:6)

那是因为你正在逃避错误的事情,因为只需要反复使用反斜杠。

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

答案 1 :(得分:2)

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

interesting read  第一

轻松,优雅,解决您的具体问题。

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

jsFiddle

答案 2 :(得分:1)

这必须完成这项工作:

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

虽然这只有在没有像[{1}}这样的属性的标签时才有效 您不需要像在示例中那样转义<div id="foo1">,而是需要转义<

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

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

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

/<(|\/)div>/:匹配<div></div>

demo

注意.container是放置html的地方。

答案 5 :(得分:0)

使用JQuery的一个班轮

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

答案 6 :(得分:0)

您可以使用简单的RegExp

来实现这一目标

output = inputText.replace(/<\w{0,}\W{0,}>|<\W{0,}\w{1,}>/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<div> text </div><div> text </div><div> text </div>".replaceTags( "<br>" )

你会得到这个 - "text<br> text <br> text <br> text <br>"

这将搜索字符串中以“&lt;”开头的部分如果标签以“/”结束,最后是“&gt;”,则在“div / p / br”之间包含一些文本。关闭标签。当您不确定元素是以大写还是小写形式写时,忽略大小写会有所帮助。