JavaScript replace() 不替换包含文字 r 字符串的文本



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

value = value.replace(/[rn]*/g, "");

但是当代码实际包含\r文本时,我该怎么做才能在不影响内容中的R和N的情况下对其进行修剪? 我试过这段代码:

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

在这段文字上:

{"client":{"werdfasreasfsd":"asdfRasdfasrnMCwwDQYJKoZIhvcNAQEBBQADGw......

我最终得到这个:

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

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

如何删除在字符串中找到的\r文本

如果要匹配文字r和文字n,则应使用以下方法:

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

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

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

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

编辑:如果要替换所有回车r,换行符n以及文字r和"",则可以使用:

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

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

(?:) 可防止捕获值,并且比()产生的开销更少,有关详细信息,请参阅此文章。

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

value = value.replace(/[rn]/g, "");

您不需要字符集后的*,因为 g 标志可以为您解决这个问题。

请注意,这将删除所有rn字符,无论它们是否在此确切序列中。

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


如果您只想在此确切顺序中删除这些字符(例如,仅当r后面紧跟n时,您可以使用以下内容:

value = value.replace(/rn/g, "");

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

如果您有包含大量 \r 的文本,并且想要保存所有这些文本,请尝试这个

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

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

最新更新