繁体   English   中英

Javascript - 替换字符串文字中的转义字符

[英]Javascript - Replacing the escape character in a string literal

我正在尝试替换 Javascript 字符串文字中的反斜杠(转义)字符。

我需要用双反斜杠替换它,以便我可以进行重定向:

var newpath = 'file:///C:\funstuff\buildtools\viewer.html'.replace(/\\/g,"\\");
window.location = newpath;

然而,似乎没有结果。

在 Javascript 处理反斜杠之前,我没有正确转义反斜杠的选项。

我怎样才能用 (\\) 替换 (\) 以便 Javascript 会很高兴?

谢谢,德里克

如果它是文字,你需要在 Javascript 看到它们之前转义反斜杠; 没有办法解决这个问题。

var newpath = 'file:///C:\\funstuff\\buildtools\\viewer.html';
window.location = newpath;

如果newpath从其他地方获取它的值,并且确实包含单个反斜杠,则不需要将它们加倍; 但是如果出于某种原因你真的想要这样做,请不要忘记在 replace() 调用中转义反斜杠:

newpath.replace(/\\/g,"\\\\");

为什么您不能选择在 Javascript 处理反斜杠之前正确转义反斜杠? 如果问题是您的 Javascript 源代码是从其他一些本身使用 \ 作为转义字符的脚本语言生成的,只需添加一个转义级别:

var newpath = 'file:///C:\\\\funstuff\\\\buildtools\\\\viewer.html';

为了更好地演示和理解字符串转义行为,请看以下示例:

通过拆分字符串,您可以看到字符串在被 JS 引擎解析后在内存中的样子,因此也提供了解决此问题的潜在(丑陋)解决方案:

'file:///C:\funstuff\buildtools\viewer.html'.split('')
//>
 ["f", "i", "l", "e", ":", "/", "/", "/", "C", ":", "", "u", "n", "s", "t", "u",
  "f", "f", "", "u", "i", "l", "d", "t", "o", "o", "l", "s", "", "i", "e", "w",
  "e", "r", ".", "h", "t", "m", "l"]

'file:///C:\funstuff\buildtools\viewer.html'.split('').map( function(e){
     return e.charCodeAt()
});
//>
[102, 105, 108, 101, 58, 47, 47, 47, 67, 58, 12, 117, 110, 115, 116, 117, 102,
 102, 8, 117, 105, 108, 100, 116, 111, 111, 108, 115, 11, 105, 101, 119, 101, 
 114, 46, 104, 116, 109, 108]
//>in Hex values by applying .toString(16)
["66", "69", "6c", "65", "3a", "2f", "2f", "2f", "43", "3a", "c", "75", "6e", 
 "73", "74", "75", "66", "66", "8", "75", "69", "6c", "64", "74", "6f", "6f", 
 "6c", "73", "b", "69", "65", "77", "65", "72", "2e", "68", "74", "6d", "6c"]

基本上,单个反斜杠会转义后面的字符,如果不注意转义上下文,则会产生意想不到的结果。

解决方案:

通过查找表,您可以恢复许多错误转义的字符,如果它们位于\x20-\x7F的可打印 ASCII 字符范围之外。 例如,对于上面的示例, 12\x0c [ 12..toString(16) ] 将变为'\\'+'v' ,依此类推。

PS:请注意发生了信息丢失,并且您正在尝试通过上下文或元信息恢复信息,这意味着在您的情况下该字符串在可打印的 ASCII 范围内。

请与社区分享任何实施。 干杯!

您应该替换为“\\\\”,因为“\\”正在转义为单个 \,因此没有变化。

<< 转义字符替换>>

import java.util.Scanner;

public class Example7 {

  public static void main(String[] args) {
    Scanner in=new Scanner(System.in);
    System.out.println("Please enter a sentence: ");
    String a=in.nextLine();
    //System.out.println("the word had enter: "+a);

    String Str1 = a.replace("\\n", "(new_line)");
    //System.out.println(Str1);
    String Str2 = Str1.replace("\\t", "(tab)");
    //System.out.println(Str2);
    String Str3 = Str2.replace("\\t", "(tab)");
    String Str4 = Str3.replace("\\\\", "(comment_line)");
    String Str5 = Str4.replace(":)", "(smile) ");
    System.out.println("The new sentence:"  +Str5);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM