JS正则表达式选择<p> </ p>中的所有<br /> - 用于在休息后缩进文本的功能

C.O*_*.O. 0 javascript regex jquery

我想在JS中选择<br />一个<p></p>带有正则表达式的段落中的所有出现.目前我只选择<br />这样的:

var regex = /<br\s*[\/]?>/gi;
Run Code Online (Sandbox Code Playgroud)

但是这样做会给我带来麻烦,因为我正在尝试选择.我需要一个更精确的正则表达式,因为标题等中断与我无关.

如果你想知道这个的上下文,我想<br />用适当的类替换带有两个段落的's,就像一个<br />但是在中断后缩进文本,如下所示:

function removeEmptyNodes(selector)
{
    $(selector).each(function() {
        if  ($(this).html().replace(/\s|&nbsp;/g, '').length == 0)
            $(this).remove();
    });
};
function assignIndents()
{
    var str = $("#content").html();
    var regex = /<br\s*[\/]?>/gi;
    $("#content").html(str.replace(regex, "</p><br /><p>"));
    $('br').prev('p').addClass('br');
    $('br').next('p').addClass('indent');
    removeEmptyNodes('#content p');
    $('br').next('.scroller').children('p').first().addClass('indent');
    $('br').replaceWith('');
    removeEmptyNodes('#content p');
};
Run Code Online (Sandbox Code Playgroud)

编辑:

我的目标是我有一个带有一个或多个换行符的段落.像这个简单的案例:<p>with some text <br />and another line<p>.我希望换行后的文本缩进并且是自己的ap.所以我需要拆分原来的p.我不想在原始段落中添加div或其他嵌套的东西.我最后需要一堆兄弟p标签:<p class="br">with some text</p><p class="indent">and another line<p> 通过哪种方式我替换<br />'s来分割p对我来说无关紧要......

Nea*_*eal 5

你为什么不在没有正则表达式的情况下找到所有?

$('p').each(function(){
    var brs = $('br', this); //all <br>s withing this <p>
    //do something with brs
});
Run Code Online (Sandbox Code Playgroud)

小提琴:http://jsfiddle.net/maniator/Ra8ax/


更新:

以下是您对新规范的要求:

$('p').each(function(){

    var html = this.innerHTML;
    var htmlArray = html.split('<br>');
    var new_html = htmlArray[0];

    for(var i = 1; i < htmlArray.length; i++){
        new_html += "<div class='break'>"+htmlArray[i]+"</div>";
    }

    this.innerHTML = new_html;

});
Run Code Online (Sandbox Code Playgroud)

小提琴:http://jsfiddle.net/maniator/Ra8ax/8/


更新没有嵌套:

JS:

$('p').each(function(){

    var html = this.innerHTML;
    var htmlArray = html.split('<br>');
    var new_html = "<p>"+htmlArray[0]+"</p>";

    for(var i = 1; i < htmlArray.length; i++){
        new_html += "<p class='break'>"+htmlArray[i]+"</p>";
    }

    $(this).replaceWith(new_html);

});
Run Code Online (Sandbox Code Playgroud)

小提琴:http://jsfiddle.net/maniator/Ra8ax/11/