Javascript正则表达式用包装<p>标签</p>替换textarea中的换行符

时间:2010-11-05 11:13:07

标签: javascript regex

见标题。我需要一个正则表达式来替换包含<p>标记的换行符。

我试过了:

var pattern = new RegExp("{(?:^|(?:\x0d\x0a){2,}|\x0a{2,}¦\x0d{2,})(.+?)(?=(?:(\x0d\x0a){2,}|\x0d{2,}|\x0a{2,}|$))}");
var notesRet = notes.replace(pattern, "</p>$3<p>");
var html = notesRet;

但它不起作用。

有什么想法吗?谢谢!

2 个答案:

答案 0 :(得分:4)

notes= notes.replace(/\r/g, '');  // normalise IE CRLF newlines
var html= '<p>'+notes.replace(/\n{2,}/g, '</p><p>')+'</p>';

你真的想把用户输入作为HTML吗?如果他们放入HTML特殊字符,甚至是<script>alert('hello!');</script>怎么办?如果要将输入字符视为纯文本,则需要HTML转义:

function encodeHTML(s) {
    return (s
        .replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
        .replace(/"/g, '&quot;').replace(/'/g, '&#39;');
    );
}

notes= encodeHTML(notes).replace(...

或者,或许更干净,用DOM来做:

var ps= notes.replace(/\r/g, '').split(/n{2,}/);
for (var i= 0; i<ps.length; i++) {
    var p= document.createElement('p');
    p.appendChild(document.createTextNode(ps[i]));
    someParentElement.appendChild(p);
}

答案 1 :(得分:0)

试试这个代码段:

var html = '<p>'+notes.replace(/\r/g, '').replace(/\n([^\n]+)/g, '</p>\1<p>')+'</p>';