见标题。我需要一个正则表达式来替换包含<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;
但它不起作用。
有什么想法吗?谢谢!
答案 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, '&').replace(/</g, '<').replace(/>/g, '>')
.replace(/"/g, '"').replace(/'/g, ''');
);
}
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>';