javascript / js中的转义字符的特殊表现 /转义自己/

发布于:2023-01-23 ⋅ 阅读:(361) ⋅ 点赞:(0)

为什么用转义字符?

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 中替换所有指定字符

第一种:使用 splitjoin 的方法

这种方法,主要包含二个阶段:

  1. 使用 split 方法,根据指定的字符将字符串分成多个部分。
  2. 然后使用 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'

这种方法需要将字符串转换为数组,然后再转换回字符串。这是一种变通方法,但不是一个好的解决方案。

参考文章:在 JavaScript 中替换所有指定字符 3 种方法 - 腾讯云开发者社区-腾讯云

注意:

js输出的会自动添加一个/ 

"不会转义,所以 " 和 /" 最后都输出 ''