关于replace()方法中第二个参数的转义问题

如果你想通过Javascript代码在网页中呈现 \ 字符,则在JS代码中你必须输入两个反斜杠 \\,否则会报错。比如:

var a = "\";
alert(a); //chrome和Firefox都会报错,IE不报错但也不会输出任何东西

而且反斜杠 \ 本身在JavaScript 中用来向文本字符串添加特殊字符所以说当你调用replace()方法,并且想将匹配项替换为特殊字符时就要使用反斜杠。

假设有一个字符串,其中有字母又有数字,如果你想将数字替换成 \ ,就要用转义符(即反斜杠 \)对反斜杠 \ 进行转义(转义符要写在被转义的特殊字符的前面)。比如:

var a = "1fge4hrj";
var b = "\\";//第一个反斜杠起转义作用
alert(a.replace(/\d/g,b)); //print:\fge\hrj

var c = "\\\\";
alert(a.replace(/\d/g,c)); //print:\\fge\\hrj

再来看一个例子:

<body>
    <textarea id="code" name="code">\\</textarea>
        <script type="text/javascript">
        function qwe() {
           var d = document.getElementById("code").value; 
                   var a = "1fge4hrj";
           alert(a.replace(/\d/g,d)); //print:\\fge\\hrj
           alert(d=="\\\\");//true
           alert(d=="\\");//false
        }
        qwe();
    </script>
</body>

在这个例子中textarea元素中有一个字符串 “\\”,通过DOM方法获取这个字符串并保存在变量 d 中,将变量 d 作为replace()方法的第二个参数,可以看到调用replace()方法的字符串中的数字被替换成了“\\”,这是为什么呢?

因为变量 d 保存的是HTML代码中的字符串“\\”,当它被JS代码调用的时候,JS解释器在后台自动将它进行了转义,字符串“\\”在JS代码中应该被写为“\\\\”。我们把变量 d 分别与字符串“\\”和字符串“\\\\”进行比较可以发现这个后台转义过程。与“\\”比较返回false,与“\\\\”比较返回true。

 

参考:1、http://www.w3school.com.cn/js/js_special_characters.asp(Javascript特殊字符)。

         2、http://www.w3school.com.cn/jsref/jsref_replace.asp(Javascript replace()方法)。

posted @ 2016-08-21 17:23  Fogwind  阅读(2180)  评论(0编辑  收藏  举报