2013-01-10 85 views
0

我喜歡stackexchange引用的方式,我試圖將其添加到我的網站,但沒有讓它跨越多行,只有一行。我需要改變做多行?塊報價格式

以下是我目前正在使用:

val = val.replace(/^>(.+?)($|\n)/ig, "<blockquote>$1</blockquote>"); 


編輯
我決定去一個不同的風格。

val = val.replace(/""([\s\S]*.+?)""/igm, "<blockquote>$1</blockquote>"); 
+0

見http://stackoverflow.com/questions/1068280/javascript-regex-multiline-flag-doesnt-work – glomad

回答

0

我放棄了這樣做的正則表達式。

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"); 

上面的代碼可以處理多組blockquotes。

+0

不,這只是使2個獨立的塊引用。 –

+0

這不是和你以前的答案一樣嗎? –

+0

哦,好的。剛剛得到它。對不起,只是愚蠢的 – Bruno

0

而不是替換,嘗試匹配每一行,然後將匹配的行組合成一個字符串。

事情是這樣的:

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>'; 

DEMO:http://jsfiddle.net/k7DVu/

+0

正在工作! –

+0

@RyanNaddy:酷!很高興我可以幫助:-) –

+0

這不適用於多套blockquotes –