javascript replace()不替换包含文字\ r \ n字符串的文本

时间:2013-11-16 20:42:14

标签: javascript regex replace expression

使用这段代码修剪出隐藏的字符,如回车和换行,没有使用javascript就好了:

value = value.replace(/[\r\n]*/g, "");

但是当代码实际上包含\ r \ n文本时,我该如何修剪它而不影响我内容中的r和n?我试过这段代码:

value = value.replace(/[\\r\\n]+/g, "");

关于这一段文字:

{"client":{"werdfasreasfsd":"asdfRasdfas\r\nMCwwDQYJKoZIhvcNAQEBBQADGw......

我最终得到了这个:

{"cliet":{"wedfaseasfsd":"asdfRasdfasMCwwDQYJKoZIhvcNAQEBBQADGw......

旁注:它只留下R和N的大写版本,因为我没有在末尾包含/ i标志,在这种情况下没问题。

如何只删除字符串中的\ r \ n文本

3 个答案:

答案 0 :(得分:25)

如果您想匹配文字\r和文字\n,那么您应该使用以下内容:

value = value.replace(/(?:\\[rn])+/g, "");

您可能认为将文字\r\n[\\r\\n]匹配是正确的方法,这有点令人困惑,但它不起作用,原因如下:

请记住,在字符类中,每个单个字符代表一个字母或符号,它不代表一个字符序列,它只是一个 set 字符。

因此,字符类[\\r\\n]实际上将文字字符\rn匹配为单独的字母,而不是序列。

修改:如果您要替换所有回车\r,换行符\n以及文字\r和'\ n`,那么您可以使用:

value = value.replace(/(?:\\[rn]|[\r\n]+)+/g, "");

关于(?:)它表示非捕获组,因为默认情况下,当您将某些内容放入常规组()时,它会被捕获到一个编号变量中,您可以在正则表达式中的其他位置使用它本身,或者匹配数组中的后者。

(?:)会阻止捕获值并导致比()更少的开销,有关详细信息,请参阅this article

答案 1 :(得分:5)

如果您的文字有很多\ r \ n并想要保存所有这些文字,请尝试使用

value.replace(/(?:\\[rn]|[\r\n])/g,"<br>")

http://jsfiddle.net/57GtJ/63/

答案 2 :(得分:1)

要删除它们,这似乎对我有用:

value = value.replace(/[\r\n]/g, "");

在字符集后面不需要*,因为g标志为您解决了这个问题。

注意,这将删除所有\r\n个字符,无论它们是否在此精确序列中。

此选项的工作演示:http://jsfiddle.net/jfriend00/57GtJ/


如果您只想按照这个确切的顺序删除这些字符(例如,只有当\r后面跟\n时,才能使用此字符:

value = value.replace(/\r\n/g, "");

此选项的工作演示:http://jsfiddle.net/jfriend00/Ta3sn/