2011-10-15 58 views
0

我使用下面的JavaScript:JavaScript將換行符分爲兩個?

if (theSelection) 
    { 
     for (var i = 0, l = theSelection.length; i < l; i++) 
     { 
     if (theSelection[i] == '[' && theSelection[i+1] == 'q') level++; 
     if (theSelection[i-6] == 'q' && theSelection[i-7] == '/' && theSelection[i-8] == '[') level--; 
     if (level<1) tmp.push(theSelection[i]); 
     } 
     theSelection = tmp.join(''); 
    } 

...然後再發送到回覆框除去從文本嵌套引用,但它留下的換行來代替清洗嵌套引號。所以,舉例來說,如果我引用來自用戶1它說後...

Text. 

[quote="User 2"]Quote text.[/quote] 

More text. 

它在回覆框,顯示了...

[quote="User 1"]Text. 



More text.[/quote] 

我會添加什麼這個JavaScript要麼刪除此空間左右,在回覆框中顯示的最後文本將出現新的限行,只留下兩個換行符之間的空間:

[quote="User 1"]Text. 

More text.[/quote] 

感謝您的幫助。

編輯:

下面的代碼的大位:

if (theSelection) 
{ 
    for (var i = 0, l = theSelection.length; i < l; i++) 
    { 
     if (theSelection[i] == '[' && theSelection[i+1] == 'q') level++; 
     if (theSelection[i-6] == 'q' && theSelection[i-7] == '/' && theSelection[i-8] == '[') level--; 
     if (level<1) tmp.push(theSelection[i]); 
    } 
    theSelection = tmp.join(''); 
} 

if (theSelection) 
{ 
    if (bbcodeEnabled) 
    { 
     insert_text('[quote="' + username + '"]' + '\n' + '\n' + theSelection + '[/quote]' + '\n' + '\n'); 
    } 
     else 
     { 
      insert_text(username + ' ' + l_wrote + ':' + '\n'); 
      var lines = split_lines(theSelection); 
      for (i = 0; i < lines.length; i++) 
      { 
       insert_text('> ' + lines[i] + '\n'); 
      } 
     } 
} 

我放在...

if (theSelection) 
{ 
    theSelection = theSelection.replace(/\n{2,}/g, "\n\n"); 
} 

...現有的兩個之間的 「如果(theSelection)」聲明,而且效果很好。剩下的一個問題。嵌套的引用刪除發生在引用文本置於其自己的引號標籤之前,並且在打開引號標籤之後添加兩個換行符。因此,如果引用的帖子在任何原始文本之前包含嵌套引號,那麼上面的代碼生成的文本在開頭處有四個換行符,而不是預期的兩個。因此,我認爲我會需要的地方... theSelection插入它自己的引用標籤內

if (theSelection) 
{ 
    theSelection = theSelection.replace(/\n{2,}/g, "\n\n"); 
} 

... 後,在這一點,「如果(theSelection)」似乎不再工作,我對於JavaScript來說,這是如此的新穎,我不知道如何用反映前面「if(theSelection)」語句的輸出的東西來替換「theSelection」。我希望至少有一點意義。

回答

2

使用RegExp。以下代碼將用兩條換行符替換2+行。

string = string.replace(/\n{2,}/g, "\n\n") 

我建議顯示一個標誌,通知讀者一個報價已經消失的事實。考慮以下幾點:

50後由用戶A:我的魚死了=(
============================
後51用戶B:

[報價= Niceidea]
(2頁前)什麼布拉布拉...
了[/ quote]
真棒!
============================

將您的代碼後:

= ===========================
50後用戶A:我的魚死了=(
========= ===================
由用戶B發佈51:太棒了!
==================== ========

上一張海報可能會被冒犯,因爲他不知道回覆的上下文。

+0

這個工作不錯,但我有我已經編輯到原來的問題一個另一個問題。並感謝您的幫助。 – Yosiah

+0

如果您試圖用2替換3或更多,可以使用'{3,}'減少開銷。使用'{2,}'仍然有效,但是這麼做的意義何在?你也可以做'/ \ n \ n +/g' – vol7ron

+0

@Yosiah使用'.replace(/ \ n {3,}/g,「\ n \ n」)替換(/^\ s + | \ s + $/g,「」)'解決你的新問題。 –

0

我已經找到了一個很好的解決方案:更少的代碼和完全的東西你想:

var output, 
    theSelection = 'Text.\n\n[quote="User 2"]\nQuote tex\nt.\n[/quote]\n\n\n\n\nMore text.'; 

    /* 
    * theSelection is: 
    * 'Text. 
    * 
    * [quote="User 2"] 
    * Quote tex 
    * t. 
    * [/quote] 
    * 
    * 
    * 
    * More text.' 
    */ 

if (theSelection) { 
    output = theSelection.replace(/\[quote=".*"\][\s\S]*\[\/quote\]/gi, '') 
         .replace(/\n{2,}/g, '\n\n'); 
} 

console.log(output); 

/* 
* Outputs: 
* 'Text. 
* 
* More text.' 
* 
*/ 
相關問題