【问题标题】:javascript replace() not replacing text containing literal \r\n stringsjavascript replace() 不替换包含文字 \r\n 字符串的文本
【发布时间】:2013-11-30 04:14:55
【问题描述】:

使用这段代码可以修剪掉回车和换行等隐藏字符,而无需使用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 文本

【问题讨论】:

    标签: javascript regex replace expression


    【解决方案1】:

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

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

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

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

    所以字符类[\\r\\n]实际上匹配文字字符\rn作为单独的字母而不是作为序列。

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

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

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

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

    【讨论】:

    • 我是否也应该将我的第一段代码更新为value = value.replace(/(\r|\n)+/g, "");?在这种情况下,() 和 [] 括号有什么区别?
    • 我见过 ?: 以前用过,但我不明白它的真正作用,你能详细说明它的功能吗?
    • @Vince 我对正则表达式做了一些改进,如果您还有其他问题,请随时提问。
    • 为了我自己,我一直坚持你最初的建议,直到我在这方面做得更好一点。我已经将我的第一行代码更新为value = value.replace(/(?:\r|\n)+/g, "");,第二行代码更新为value = value.replace(/(?:\\r|\\n)+/g, "");,欢迎您和 jfriend00 提出您的建议。
    • 对 "\r, 换行符 \n 以及文字 \r 和 '\n`" 的编辑效果非常好,谢谢!
    【解决方案2】:

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

    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/

    【讨论】:

      【解决方案3】:

      如果你有很多 \r\n 的文本并且想保存所有这些,试试这个

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 2017-03-06
        • 1970-01-01
        • 1970-01-01
        • 2017-05-05
        相关资源
        最近更新 更多