为什么用转义字符?
HTML中<,>,&等有特殊含义,不能直接使用。这些符号是不显示在我们最终看到的网页里的,那如果我们希望在网页中显示这些符号,该怎么办呢?
转义字符。在HTML中,
定义转义字符串的原因有两个:
第一个原因是像“<”和“>”这类符号已经用来表示HTML标签,因此就不能直接当作文本中的符号来使用。为了在HTML文档中使用这些符号,就需要定义它的转义字符串。当解释程序遇到这类字符串时就把它解释为真实的字符。在输入转义字符串时,要严格遵守字母大小写的规则。
第二个原因是,有些字符在ASCII字符集中没有定义,因此需要使用转义字符串来表示。
是什么?
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | 代表一个反斜线字符''' | 092 |
\' | 代表一个单引号(撇号)字符 | 039 |
\" | 代表一个双引号字符 | 034 |
\? | 代表一个问号 | 063 |
\0 | 空字符(NULL) | 000 |
\ooo | 1到3位八进制数所代表的任意字符 | 三位八进制 |
\xff | 1到2位十六进制所代表的任意字符 | 二位十六进制 |
特殊问题(本文重点)
需求:
需要给字符串: " "aaa":"111","bbb":"222" " 中的每个"之前加一个\
问题:
我一开始是这样想的,用字符串方法,把"替换成\"就可以了
实现如下:
let searchRegExp = /"/g
let replaceWith = '/"'
let result = '"duck" :"go"'.replace(searchRegExp, replaceWith)
result
'/"duck/" :/"go/"'
JavaScript 中替换所有指定字符
第一种:使用 split
和 join
的方法
这种方法,主要包含二个阶段:
- 使用
split
方法,根据指定的字符将字符串分成多个部分。 - 然后使用
join
方法将分割的多个部分连接在一直,并在它们之间插入指定的字符。
例如,我们将字符串'1+2+3'
中的+
替换为-
。首先,通过split
方法根据 +
分割符将'1+2+3'
分开,得到['1','2','3']
。然后通过 join 方法并指定连接字条-
,得到结果'1-2-3'
。示例如下:
const search = 'duck';
const replaceWith = 'goose';
const result = 'duck duck go'.split(search).join(replaceWith);
result; // => 'goose goose go'
'duck duck go'.split('duck')
将字符串分割成几段:['', ' ', ' go']
。 ['', ' ', ' go'].join('goose')
在元素之间插入'goose'
并连接起来,得到'goose goose go'
。
最后我们把这种方式封装成一个帮助函数 replaceAll
:
function replaceAll(string, search, replace) {
return string.split(search).join(replace);
}
replaceAll('abba', 'a', 'i'); // => 'ibbi'
replaceAll('go go go!', 'go', 'move'); // => 'move move move!'
replaceAll('oops', 'z', 'y'); // => 'oops'
这种方法需要将字符串转换为数组,然后再转换回字符串。这是一种变通方法,但不是一个好的解决方案。
注意:
js输出的会自动添加一个/
"不会转义,所以 " 和 /" 最后都输出 ''