web-dev-qa-db-ja.com

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'として翻訳したいだけです

なにが問題ですか?

15
Junior M

文字列定数のバックスラッシュを2倍にする必要があります。

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

レガシーシステムが実際にそのような埋め込みの引用符で囲まれていない(つまり、2倍にされていない)バックスラッシュを使用してページにJavaScript文字列定数を作成している場合、それは壊れており、問題が発生します。ただし、XMLやJSONなどの何らかのajax呼び出しを介して文字列を取得している場合、コードは問題ないように見えます。

31
Pointy

実際には、\46を文字&のエスケープコードシーケンスとして解釈しています。文字列をハードコーディングする場合は、\をエスケープする必要があります。

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

サンプル: http://jsfiddle.net/6QWE9/

4
mellamokb

交換部品は問題ではなく、弦そのものです。あなたの文字列:

"/46\465531_Thumbnail.jpg"

/46\465531ではありません。むしろ、バックスラッシュはエスケープ文字として機能しています。次のように変更する必要があります。

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

つまり、バックスラッシュでバックスラッシュをエスケープします。

1
RHSeeger

交換に問題はありません。入力が間違っています。

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