jquery删除新行,然后用block元素包装textnodes

时间:2011-02-16 18:18:43

标签: javascript jquery regex

我有一些这样的段落:

  

“这是第一个.r \ r \ n \ n这个   是第二个有很多新线的人   在\ n \ n \ n \ n \ n \ n和最后一段之后   \ n \ r \ R“

我想删除新行并使用<p>标记包装每个段落。我期待输出如下:

<p>This is the first para.</p>
<p>This is the second one with lot of new line after</p>
<p>And the last para.</p>

4 个答案:

答案 0 :(得分:11)

var d = "line 1\n\nline2\n\n\n\nline3";
$('body').append('<p>'+d.replace(/[\r\n]+(?=[^\r\n])/g,'</p><p>')+'</p>');
或许这样的事情?

如果您发现该行在开头或结尾包含任何新行/回车,请记住在替换值之前先在字符串上调用.trim()(使用此示例,{{1} })

更强大的解决方案

d.trim().replace(...)

PHP版本:

function p(t){
    t = t.trim();
    return (t.length>0?'<p>'+t.replace(/[\r\n]+/,'</p><p>')+'</p>':null);
}
document.write(p('this is a paragraph\r\nThis is another paragraph'));

http://www.ideone.com/1TRhh

答案 1 :(得分:2)

这个怎么样?

var output = $();

$.each("This is the first para. \r\n\n This is the second one with lot of new line after \n\n\n\n\n\n And the last para. \n\r\r".split(/[\n\r]+/g), function(i, el) {
    if (el) {
        output = output.add($('<p>' + el + '</p>'));
    }
});

这将创建一个包含p元素的jQuery选择。

答案 2 :(得分:1)

你可以尝试这样的事情:

function parse_it(yourstring, tagname){
   yourstring.replace(/[\r\n]+/g, '#x#');
   paragraphs = yourstring.split('#x#');

   pars = "";
   for(var i=0; i<paragraphs.length; i++)
      pars += '<'+tagname+'>'+paragraphs[i]+'</'+tagname+'>';

   return pars;
}

var parsedstring = parse_it("This is the first para. r\r\n\n This is the second one with lot of new line after \n\n\n\n\n\n And the last para. \n\r\r", 'p');

答案 3 :(得分:1)

替换正则表达式:/(?:[\r\n]*)(.+)(?:[\r\n]*)/
用:<p>$1</p>
context:global

在Perl中:s/ (?:[\r\n]*) (.+) (?:[\r\n]*) /<p>$1<\/p>/xg