为什么用转义字符?
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输出的会自动添加一个/
"不会转义,所以 " 和 /" 最后都输出 ''