Преобразование обратных косых черт в косые черты с помощью javascript не работает должным образом?

У меня есть переменная 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'

Что не так?

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

"/46\465531_Thumbnail.jpg"

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

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

т.е. сбрасывая обратную косую черту с обратной косой чертой.

Ответ 4

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

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