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

时间:2011-06-17 17:05:50

标签: javascript jquery regex

我想在JS中选择带有正则表达式的<br />段内<p></p>的所有出现。目前我只选择所有<br />

var regex = /<br\s*[\/]?>/gi;

但是这样做会让我在某些方面遇到麻烦,因为我正在尝试选择。我需要一个更精确的正则表达式,因为标题等中断与我无关。

如果你想知道这个的上下文,我想用适当的类替换<br />两个段落,就像<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');
};

修改:

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

2 个答案:

答案 0 :(得分:5)

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

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

小提琴: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;

});

小提琴: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);

});

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

答案 1 :(得分:3)

使用Jquery选择器而不是正则表达式:$('p br')

<小时/> 更新2:

$('#content')
  .contents()
  .filter(function() {
    return this.nodeType == Node.TEXT_NODE;
  })
  .wrap("<p>");

var br = $('#content br');
br.prev('p').addClass('br');
br.next('p').addClass('indent');
br.remove();

http://jsfiddle.net/wWsht/