无法使用正则表达式替换字符串

时间:2014-09-05 13:36:09

标签: javascript jquery replace

我在这里玩jsfiddle:http://jsfiddle.net/dm9eebz9/

HTML

<div id="wrapper">
    <p class="body">Line 1
        <br>
        <br>Line 3</p>
    <p class="body">Line 1
        <br>Line 2
        <br>
        <br>
        <br>
        <br>Line 6</p>
    <p class="body">Line 1
        <br>Line 2</p>
</div>

使用Javascript / jQuery的

$('#wrapper p.body').each(function () {
    var temp = $(this).innerHTML;
    this.innerHTML = temp.replace(/(<br>)+/gim, "<br>");
});

我的目标是在它们发生时试图摆脱2 <br>以上。然而,它似乎并不认识临时。这是jsfiddle的行为,还是我犯了一个明显的错误?

4 个答案:

答案 0 :(得分:1)

jsfiddled:http://jsfiddle.net/pe6w7z1e/1/

这个想法是:将有一个休息时间和一个/多个(一个/多个spacenewline + break)&gt;&gt;只用一次休息替换

以下是修改后的代码:

$('p.body').each(function () {
    var elem = $(this)
    var temp = elem.html();
    elem.html(temp.replace(/<br>(\s+<br>)+/img, "<br>"));

});

如果它回答了您的问题,请标记为答案

我认为最好在所有情况下使用jquery。混合使用Jquery和原始javascript并不是一个好主意。

答案 1 :(得分:1)

使用.html()而非innerHTML;

正则表达式模式/(<br>\s*)+/\s*的空格考虑在内,其中匹配0个或更多空白字符。

$('p.body').each(function () {
    var temp = $(this).html();
    $(this).html(temp.replace(/(<br>\s*)+/gim, "<br>"));
});

同样注释,use your browsers console用于调试,始终RTFM

小提琴:http://jsfiddle.net/dm9eebz9/4/

答案 2 :(得分:1)

我真的不认为正则表达式是正确的工具。您可以使用.contents.filter的组合删除重复的<br />代码:

var prev = null;
var $nodes = $('.body')
    .contents()
    .filter(function () {
        return this.nodeType !== 3 || $.trim(this.data) !== "";
    });

for (var i = 1; i < $nodes.length; i++) {
    if ($nodes.eq(i).is('br') && $nodes.eq(i-1).is('br')) {
        $nodes.eq(i).remove();
    }
}

这里的复杂性是<br />标签之间的文本节点,因此是两步过程。

示例: http://jsfiddle.net/dm9eebz9/9/

答案 3 :(得分:0)

您需要为innerHTML属性使用正确的对象。这是一个DOM对象属性,而不是一个jQuery。您可以在DOM元素上使用innerHTML DOM属性:

$('p.body').each(function () {
    var temp = this.innerHTML;
    this.innerHTML = temp.replace(/(<br>)+/gim, "<br>");
});

JSFiddle:http://jsfiddle.net/dm9eebz9/6/

或在jQuery对象上使用html()方法:

$('p.body').each(function () {
    var temp = $(this).html();
    this.html(temp.replace(/(<br>)+/gim, "<br>"));
});

http://jsfiddle.net/dm9eebz9/7/

注意&#34;正确&#34;换行符是<br/>,而不是<br>,但我认为你无法改变