【问题标题】:Remove These Line Breaks with JavaScript使用 JavaScript 删除这些换行符
【发布时间】:2011-08-31 00:06:33
【问题描述】:

对于我的生活,我无法弄清楚如何删除这种奇怪的格式。这是在JSON.stringify(someObj):http://jsbin.com/ohoto5/2/edit 之后发送给我的内容

单击预览,您将看到格式。我需要它是一行,以便它可以进入 JSONP 响应(即jsonp12345(...))。如果它是多行,则会触发语法错误。我已经尝试了我能想到的每一个正则表达式组合,但没有任何东西可以删除这些线条。甚至没有/[\r\n\s\t]/gi。唯一似乎删除它的是:/[\w\n]/gi 然而,问题是我失去了所有的话!

有什么帮助吗?请不要 jQuery 修复...我需要纯 JavaScript。

这是 Chrome 中的对象(图片):

【问题讨论】:

  • 如何获取数据?你用php吗?或者只是一个 ajax 调用
  • 在对象上调用 JSON.stringify() 后,数据将通过 iframe 的 POST 请求发送
  • 哦,PHP 将数据存储在 MySQL 中,所以我想如果 PHP 中有修复,那也可以
  • 您是否尝试过使用JSON.stringify(someObj).charCodeAt(index_of_weird_line_break) 来查看它是什么字符?如果所有空格的正则表达式不匹配它,它可能是一些奇怪的 Unicode 东西。
  • 向我们展示您正在字符串化的对象

标签: php javascript regex json jsonp


【解决方案1】:

在我看来应该这样做:

s.replace(/[\r\n]/g, '')

jsFiddle Demo

似乎所有不必要的换行符都被删除了。

【讨论】:

  • 我点击了“运行”,但这是我看到的:skitch.com/oscargodson/fy4u7/… --- 换句话说,线条似乎还在
  • @Oscar 但是这些行不是内容本身的重要组成部分吗?
  • 中包含 \n 或 \r 的内容将转换为
    。对于 HTML 周围的换行符,我需要删除它们,否则会引发语法错误。
  • 我做了一些调整。实际上那里没有换行符,它们只是因为 HTML 存在(<p>display: block;)。检查这个:jsfiddle.net/axL7H/1
  • 但是我的 JSBin 链接中上面的代码是直接从我的 MySQL 数据库中复制的,所以上面不会有任何样式,并且 JSON 中的 HTML 永远不会命中 DOM。
【解决方案2】:

很难说出需要什么,但是浏览器识别为空白的内容之间存在许多差异,请考虑精确设置您希望匹配的字符,例如

// List of characters matched as white space 
var whiteSpace = '\u0009\u000a\u000b\u000c\u000d\u0020\u00a0' + 
                 '\u1680\u180e\u2000\u2001\u2002\u2003\u2004' + 
                 '\u2005\u2006\u2007\u2008\u2009\u200a\u200b' + 
                 '\u2028\u2029\u202f\u205f\u3000'; 
var re = new RegExp('[' + whiteSpace + ']+', 'g');

var x = 'lots and  lots     of    space     ';

alert(x.replace(re, ' ').replace(/ +/,' '));

【讨论】:

【解决方案3】:

放弃 JS 正则表达式后,我尝试了 PHP,并首次尝试:

preg_replace('/\s\s+/', ' ', $referrer['cache'])

缓存是我上面原始 JSBin 链接中的 JSON。现在它返回:

callback([{"LatLng":{"Ba":45.531124,"Ca":-122.68374699999998},"InfoWindow":" <address>1125 NW 12th Ave, Portland, OR</address> <p>My first apartment</p> ","originalAddress":"1125 NW 12th Ave, Portland, OR"},{"LatLng":{"Ba":45.5138621,"Ca":-122.67767300000003},"InfoWindow":" <address>1330 SW 3rd Ave, Portland, OR</address> <p>My 2nd apartment</p> ","originalAddress":"1330 SW 3rd Ave, Portland, OR"},{"LatLng":{"Ba":45.748955,"Ca":-122.47959000000003},"InfoWindow":" <address>17501 NE 188th Ct, Brush Prairie, WA</address> <p>The first place I lived by my own</p> ","originalAddress":"17501 NE 188th Ct, Brush Prairie, WA"},{"LatLng":{"Ba":45.756944,"Ca":-122.43575800000002},"InfoWindow":" <address>18607 NE Erickson Rd, Brush Prairie, WA</address> <p>Last place I lived with my parents</p> ","originalAddress":"18607 NE Erickson Rd, Brush Prairie, WA"}])

有趣的是,JS 中完全相同的正则表达式如何不给出相同的结果 -_-

【讨论】:

    【解决方案4】:

    CRLF被编码为\r\n,所以

    str = str.replace(/(\r\n)/g, '');

    应该做的工作。

    【讨论】:

    • 实际上,这只会替换 Windows 样式的换行符。使用str.replace(/[\r\n]/g, ''); 替换所有这些(方括号而不是括号)。
    猜你喜欢
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多