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

您需要将字符串常量中的反斜杠加倍:

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

如果您的遗留系统实际上是在您的页面上使用嵌入的、未引用的(即不加倍的)反斜杠创建 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 回答