15

バックスラッシュからフォワードスラッシュへのレガシーシステムからの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

4 に答える 4

32

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

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

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

于 2011-06-20T21:20:01.143 に答える
4

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

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

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

于 2011-06-20T21:20:23.863 に答える
1

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

"/46\465531_Thumbnail.jpg"

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

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

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

于 2011-06-20T21:23:09.280 に答える
0

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

javascript:alert("/46\\465531_Thumbnail.jpg".replace(/\\/g,"/"));
                     ^
                     \----------------  need to escape this!
于 2011-06-20T21:20:35.920 に答える