2010-01-26 50 views
3

這是推動我瘋了,我有如下格式的字符串:的Javascript更換新行字符

<br /> 
twice<br /> 
imap Test wrote:<div class="nestedMessage1"><br /> 
> nested<br /> 
><br /> 
> [email protected] wrote:<div class="nestedMessage2"><br /> 
>> test<br /> 
>><br /> 
>> -- <br /> 
>> Message sent via AHEM.<br /> 
>> </div><br /> 
><br /><br /></div> 

以下代碼:

string = string.replace(/\n/g, ""); 
string = replaceAll(string, "<br />>", "<br />"); 

function replaceAll(string, replaceString, replaceWith) 
{ 
    return string.replace(new RegExp(replaceString, 'g'),replaceWith); 
} 

什麼,我試圖做的是去除< BR/> >和只用< BR/>取代它,我不能簡單地取代>的所有實例,因爲他們可能在別處線包含,所以我只需要在一開始將其刪除。我已經嘗試了轉義字符並對正則表達式進行了硬編碼,以顯式刪除新行,而不是將它們包含在函數調用中。任何幫助,將不勝感激。

+0

您可能有\ r的在那裏, – peller 2010-01-26 00:09:34

+0

也有
>>不只是
> – 2010-01-26 00:11:21

+0

@peller,據我所知,javascript忽略了返回轉義字符。 @Jason:最初的代碼是循環置換的次數來的>取值個數的深度。 評論總是讚賞,雖然。 :) – Gazler 2010-01-26 00:18:13

回答

9

如果你的目標只是在行的開頭除去所有> S,這是很容易做到:

var out = in.replace(new RegExp("^>+", "mg"), ""); 

var out = in.replace(/^>+/mg, ""); 

m標誌意味着多行,以便^$將匹配行的開頭和結尾,而不是僅僅是個開始和結束的字符串。見RegExp Object

編輯:值得一提的是,你應該可能傾向於使用RegExp對象在第二形式(正則表達式文字)。見Are /regex/ Literals always RegExp Objects?Why RegExp with global flag in Javascript give wrong results?

此外,還有在全球標誌如何對被多次使用正則表達式的文字處理瀏覽器的差異。最好避免它,並明確使用RegExp對象。

+0

問題的一個優雅的解決方案。非常感激。 – Gazler 2010-01-26 00:18:34

+1

+1使正則表達式看起來很有趣 – 2010-01-26 00:47:13