我喜欢 stackexchange 引用的方式,我试图将它添加到我的网站,但没有让它跨多行工作,只有一行。我需要改变什么来做多行?
这是我目前正在使用的:
val = val.replace(/^>(.+?)($|\n)/ig, "<blockquote>$1</blockquote>");
编辑
我决定换一种风格。
val = val.replace(/""([\s\S]*.+?)""/igm, "<blockquote>$1</blockquote>");
我喜欢 stackexchange 引用的方式,我试图将它添加到我的网站,但没有让它跨多行工作,只有一行。我需要改变什么来做多行?
这是我目前正在使用的:
val = val.replace(/^>(.+?)($|\n)/ig, "<blockquote>$1</blockquote>");
编辑
我决定换一种风格。
val = val.replace(/""([\s\S]*.+?)""/igm, "<blockquote>$1</blockquote>");
不要替换,而是尝试匹配每一行,然后将匹配的行组合成一个字符串。
像这样的东西:
var val = '>abc\n>def\n>ghi',
regex = /(?:^>)(.+)(?:$|\n)/img,
match = '', quote = [];
while((match = regex.exec(val)) !== null){
quote.push(match[1]);
}
val = '<blockquote>'+quote.join('<br/>')+'</blockquote>';
演示:http: //jsfiddle.net/k7DVu/
我放弃了在正则表达式中这样做。
var a = '>abc\n>def\n>ghi'.split( /\n/ ); // [">abc", ">def", ">ghi"]
var previousInBlock = false;
var currentInBlock = false;
var nextInBlock = false;
for( var i = 0; i < a.length; i++ ) {
previousInBlock = currentInBlock;
currentInBlock = a[i].indexOf( ">" ) === 0;
nextInBlock = ( i + 1 ) < a.length ? a[i+1].indexOf( ">" ) === 0 : false;
if ( currentInBlock ) {
a[i] = a[i].slice( 1 );
if( !previousInBlock ) {
a[i] = "<blockquote>" + a[i];
}
if ( !nextInBlock ) {
a[i] = a[i] + "</blockquote>";
}
}
}
a.join( "\n" );
上面的代码可以处理多组块引用。