2010-01-26 52 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