3

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

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

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 是否提供了更好的方法来做到这一点?

4

7 回答 7

7

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

newhtml = newhtml.replace(/<div>/g,'<br>');
newhtml = newhtml.replace(/<\/div>/g,' ');
于 2012-08-23T11:41:21.657 回答
2

是的,你是对的,jQuery 确实提供了一种更好的方法来做到这一点。

先读个有趣的 。

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

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

jsFiddle

于 2012-08-23T12:01:56.507 回答
1

这必须完成工作:

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

尽管这仅在没有具有某些属性的标签时才有效,例如<div id="foo1"> 您不需要<像在示例中那样转义,但是您确实需要转义/

于 2012-08-23T11:42:40.630 回答
1

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

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

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

于 2012-08-23T11:53:11.073 回答
0

一种简单的方法如下:

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

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

演示

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

于 2012-08-23T11:54:00.243 回答
0

使用 JQuery 的一个班轮

newhtml = $(newhtml ).text().split(' ').join('<br/>');
于 2012-08-23T12:05:22.387 回答
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>"

这将搜索字符串中以“<”开头的部分,其中包含“div/p/br”之间的一些文本,如果标签以“/”结尾,最后是“>”标签的结束。当您不确定元素是用大写还是小写写成时,忽略大小写会有所帮助。

于 2014-02-04T08:36:57.673 回答