在javascript中将转义字符添加到字符串中

时间:2017-06-15 18:10:12

标签: javascript html

<html>
<body>

<p id="demo"></p>

<script>

var x = 'It\'s \@lright';
var y = "We are the so-called \"Vikings\" from the north.";
var i;
var s = "";
var z = "Thi$ is * a@ demo";
var patt = "[^A-Za-z0-9\\s]";
for(i=0;i<z.length;i++){
  if(z[i].match(patt)){
    s+= "\\"+z[i];
  }
  else{
    s+= z[i];
  }
}
document.getElementById("demo").innerHTML = x + "<br>" + y + "<br>" + s;  

</script>

</body>
</html>

我得到的上述脚本的输出是:

  

它的@lright
  我们就是所谓的“维京人”&#34;来自北方   Thi \ $是\ * a \ @ demo

我不知道字符串xy的原因,如果我添加任何特殊字符后跟'\'(反斜杠),字符串会显示为特殊人物。但是当我通过在每个特殊字符前附加'\'来对字符串s进行处理时,字符串会在特殊字符前面显示'\'

有人可以解释一下吗?还请告诉我如何添加&#39; \&#39;在每个特殊字符之前,当我打印字符串时,我只看到特殊字符(不是'\'前面有{{1}}现在正在发生)?

2 个答案:

答案 0 :(得分:1)

  

为什么对于字符串x和y,如果我添加任何特殊字符后跟'\'(反斜杠),字符串将显示为特殊字符

因为转义字符是字符串文字语法的一部分,所以您使用字符串文字创建xy

当JavaScript源代码被解析为字符串原语时,转义序列将转换为它们所代表的字符。

  

但是当我通过在每个特殊字符

之前附加'\'来表示字符串s

因为那时你没有使用字符串文字。 "\\"是一个字符串文字,后跟反斜杠的转义字符在字符串原语的数据中变为反斜杠。

当您将其与另一个字符串原语连接时,您不再处于解析源代码阶段,您在数据中有反斜杠

  

还请告诉我如何在每个特殊字符之前添加'\',这样当我打印字符串时,我只看到特殊字符(不是现在附加在他们面前的'\')?

什么都不做。数据中已经包含特殊字符。

获取您想要的表单中已存在的内容是没有意义的,然后修改它以获得您想要的表单。

答案 1 :(得分:1)

反斜杠字符是字符串转义字符的指示符。当在字符串中找到它时,JavaScript运行时知道将跟随它的字符指示要转义的实际字符。如果你只想包含一个反斜杠,那么你必须为它提供转义码,这是两个反斜杠。

console.log("\"This string has double quotes embedded within double quotes\"");

// If we want to output a single backslash, we need to escape with with \\
// So, if we want to produce two of them, we need \\\\
console.log("The escape code for a \\ is \\\\");

console.log("The escape code for a \' is \\'");

console.log("The escape code for a \" is \\\"");

现在,区分“JavaScript”字符串转义序列与HTML实体代码非常重要。

如果您使用包含JavaScript转义字符的JavaScript字符串并发送该字符串以供HTML解析器解析,则转义序列将已处理,并且HTML解析器将接收该工作的结果。 HTML解析器将只渲染通常会传递的实际字符。

JavaScript转义字符只有在JavaScript运行时处理时才有意义,而不是HTML解析器:

var x = "This will be split over two lines when processed by the JavaScript runtime, \n\nbut the escape code will will just cause normal carriage return white space for the HTML parser";

var y = "\"To escape or not to escape\"";

// Escape code will be parsed and result in two groups of text
alert(x);

// Here, the result of the escaping will be passed to the HTML parser for further processing

// But here, the new line characters embedded within the string will be treated as all exteraneous
// white space in an HTML document is - - it will be normalized down to a single space.
document.querySelector("#d1").innerHTML = x;
document.querySelector("#d2").innerHTML = y;
<div id="d1"></div>
<div id="d2"></div>