Удалить эти разрывы строк с помощью JavaScript - PullRequest
2 голосов
/ 23 мая 2011

За свою жизнь я не могу понять, как убрать это странное форматирование. Это то, что мне отправляют после JSON.stringify(someObj): http://jsbin.com/ohoto5/2/edit

Нажмите на предварительный просмотр, и вы увидите форматирование. Мне нужно, чтобы это была одна строка, чтобы она могла идти в ответе JSONP (т.е. jsonp12345(...)). Если это несколько строк, это вызовет синтаксическую ошибку. Я пробовал все регулярные выражения, которые я могу придумать, и ничто не удаляет строки. Нет /[\r\n\s\t]/gi даже. Единственное, что, кажется, удаляет это: /[\w\n]/gi однако проблема в том, что я теряю все слова!

Любая помощь? Пожалуйста, не исправляйте jQuery ... Мне нужен чистый JavaScript.

Вот объект в Chrome (рис.): enter image description here

Ответы [ 4 ]

3 голосов
/ 23 мая 2011

Мне кажется, что это должно быть сделано:

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

jsFiddle Demo

Похоже, что все ненужные разрывы строк удалены.

1 голос
/ 23 мая 2011

После отказа от регулярного выражения JS я попробовал PHP и сначала попробовал:

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

, где кеш - это JSON в моей исходной ссылке на JSBin выше.Теперь он возвращает:

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 не дает того же результата -_-

1 голос
/ 23 мая 2011

Сложно сказать, что нужно, однако есть много различий между тем, что браузеры распознают как пробел, подумайте над тем, чтобы точно указать, какие символы вы хотите сопоставить, например,

// 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(/ +/,' '));
0 голосов
/ 23 мая 2011

CRLF кодируется как \ r \ n, поэтому

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

должны выполнять эту работу.

...