Javascript将换行减少到两个?

时间:2011-10-15 13:33:02

标签: javascript line-breaks

我正在使用以下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");
}

...在两个现有的“if(theSelection)”语句之间,它运作良好。还有一个问题。嵌套引用删除发生在引用文本放在其自己的引号标记之前,并且在开始引号标记之后添加两个换行符。因此,如果引用的帖子在任何原始文本之前包含嵌套引号,则上述代码生成的文本在开头处有四个换行符而不是预期的两个换行符。所以我想我需要放置......

if (theSelection)
{
    theSelection = theSelection.replace(/\n{2,}/g, "\n\n");
}
> 在之后将选择插入其自己的引号标签中,此时“if(theSelection)”似乎不再起作用,而且我对javascript很新,我不喜欢我知道如何用反映前一个“if(theSelection)”语句输出的东西替换“theSelection”。我希望这至少有点意义。

2 个答案:

答案 0 :(得分:2)

使用RegExp。以下代码将用两个换行符替换2个以上的新行。

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

我建议显示一个标志,告知读者报价消失的事实。请考虑以下事项:

  

用户发帖50:我的鱼死了=(
  ============================
  用户B发布51:

     
    

[报价= Niceidea]
    (2页在前)blabla怎么样? ...
    [/引用]     
    真棒!     
============================

  

应用您的代码后:

  

============================
  用户发布50:我的鱼死了=(
  ============================
  由用户B发布51:真棒!   
============================

之前的海报可能会被冒犯,因为他不知道回复的背景。

答案 1 :(得分: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.'
 * 
 */