Преобразование обратных косых черт в косые черты с помощью 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!