Преобразование обратной косой черты в прямую косую черту с помощью JavaScript не работает должным образом? - PullRequest
14 голосов
/ 21 июня 2011

У меня переменная javascript, пришедшая из прежней системы с обратными слешами в прямые косые черты:

'/46\465531_Thumbnail.jpg'

и я пытаюсь преобразовать в это:

'/46/465531_Thumbnail.jpg'.

Нет способа устранить проблему в устаревшей системе.

Вот команда, которую я запускаю в браузере IE8:

javascript:alert("/46\465531_Thumbnail.jpg".replace(/\\/g,"/"));

в ответ я получаю:

---------------------------
Message from webpage
---------------------------
/46&5531_Thumbnail.jpg
---------------------------
OK   
---------------------------

на самом деле я просто хочу перевести как '/46/465531_Thumbnail.jpg'

Что не так?

Ответы [ 4 ]

31 голосов
/ 21 июня 2011

Вам необходимо удвоить обратную косую черту в вашей строковой константе:

alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/"));

Если ваша устаревшая система фактически создает строковые константы JavaScript на ваших страницах со встроенными обратными косыми чертами без кавычек (то есть без удвоения)вот так, то он сломан и у тебя будут проблемы.Однако, если вы получаете строки с помощью какого-либо вызова ajax в XML, JSON или чем-то еще, тогда ваш код выглядит хорошо.

4 голосов
/ 21 июня 2011

На самом деле \46 интерпретируется как последовательность escape-кода для символа &.Если вы собираетесь жестко закодировать строку, вам нужно экранировать \:

alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/"));
          ^^ change \ to \\

Пример: http://jsfiddle.net/6QWE9/

1 голос
/ 21 июня 2011

Замена не проблема, это сама строка.Ваша строка:

"/46\465531_Thumbnail.jpg"

не /46\465531.Скорее, обратная косая черта действует как побег.Вам нужно изменить его на:

javascript:alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/"));

, т. Е. Экранирование от обратной косой черты.

0 голосов
/ 21 июня 2011

Ничего плохого в замене. Неверный ввод.

javascript:alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/"));
                     ^
                     \----------------  need to escape this!
...