使用Javascript - 在一个字符串替换转义字符(Javascript - Replacin

2019-07-04 17:45发布

我想,以取代在JavaScript字符串文字反斜杠(转义)字符。

我需要一个双反斜线来代替它,这样我可以再做一次重新定位:

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

然而,似乎没有结果。

我没有正确地转义反斜线他们为JavaScript处理之前的选项。

我怎么能替换(\)与(\\),这样的Javascript会幸福吗?

谢谢,德里克

Answer 1:

如果它是一个文字,你需要躲避反斜线的Javascript看到之前 ; 还有周围没有办法。

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

如果newpath是从别的地方得到它的价值,并且确实含有单反斜线,你并不需要他们加倍; 但如果你真的想出于某种原因,不要忘了逃跑的替换()调用的反斜杠:

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

为什么你没有正确地转义反斜线他们为JavaScript处理之前的选项? 如果问题是正在从本身使用\作为转义字符一些其他脚本语言生成你的Javascript源,只需添加逃逸的水平:

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


Answer 2:

你应该用“\\\\”,因为“\\”被泄露到一个单一的\因此没有改变被更换。



Answer 3:

为了更好地展示和了解字符串逃逸行为 ,采取下面的例子:

你可以看到字符串看起来像在内存中被解析由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"]

基本上单反斜杠转义以下字符,从而引起意外的结果,如果该逃逸上下文不重视。

解:

通过查找表,你可以,如果他们撒谎的可打印的ASCII字符范围之外的恢复许多错误地转义字符\x20-\x7F 。 对于以上例如,示例12\x0c [ 12..toString(16) ]将成为'\\'+'v'等等。

PS:请注意,信息丢失发生,而你试图通过contextual-或元信息来恢复信息,你的情况,该字符串是可打印的ASCII范围含义。

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



Answer 4:

<<转义字符替换>>

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);
  }
}


文章来源: Javascript - Replacing the escape character in a string literal