JavaScript 转义字符
1、先了解字符串
学习正则之前,先了解一下字符串,字符串之所以叫字符串因为两边有"引号",比如下面的"abcdef"是字符串
var str = "abcdef"; console.log(str); // abcdef
现在想在字符串里面显示一个"文本的引号"能办到吗?直接在字符串里面写引号,"ab"cdef" 前面"ab"成一对引号,后面 cdef" 的这个引号,发生了识别错误
var str = "ab"cdef"; // "ab"前面的引号成一对 ,cdef"后面的引号往后找
所以一般情况下的经验是
1). 双引号里面套单引号
2). 单引号里面套双引号
var str = "ab'cdef"; // 双引号里写单引号 var str1 = 'ab"cdef'; // 单引号里写双引号 console.log(str, str1); // ab'cdef ab"cdef
但是就想在双引号里面写个双引号能办到吗?
在字符串里面写双引号的话 "ab"cdef" 说明一个问题,这个双引号是正常的语法规定,它会先识别为语法其次再按文本来,能识别为语法就不按文本来
2、转义字符 \
这时候想让它不按照语法来,怎么办呢?
在前面加一个 \ 叫转义符号 "ab\"cdef",这个叫"反斜杠"(不是问号下面那个斜杆,问号下面是注释用的那个斜杆)
这个反斜杠正常写到字符串里面,会把反斜杠后面接着那个字符取消掉它原来的意思(它原来的意思识别为语法规定和前面的双引号成对出现),加一个转义符号之后就转义成正常文本,就能当做一个正常文本(变成文本双引号)来输出
转义符号本身输不出来,也就是说它俩 \" 成一组了"ab\"cdef"
var str = "ab\"cdef"; console.log(str); // ab"cdef
这是转义符号的第一点用途,也就是说有些特殊的东西没法写在文本里面,通过转义符号就可以了。
注意一下,
想在字符串里面打印一个转义符号怎么办?转移符号有自身的语法,想消除转移符号的自身语法怎么办?再来一个转义符号把它转义了"ab\\cdef"
var str = "ab\\cdef"; console.log(str); // ab\cdef
这是转义符号基本的用法,还有一些高难的用法。
转义符号除了能把后面的东西转义以外,它配合一些特殊的字母还有特殊的语法意义。
比如转义符号配合一个n,转义符号后面加上一个n,\n 他两个就变成一个功能叫"换行"就我们所说的回车
var str = "ab\ncdef"; // 字符串变成两行的字符串 console.log(str);
但是用document.write()写到页面上是不能换行的,因为document.write(str)是当做文档流输入页面的,文档里面识别不了回车,回车都变成文字分隔符了(变空格了)
var str = "ab\ncdef"; document.write(str); // ab cdef
所以想看是不是多行字符串只能在控制台输出console.log
3、字符串换行符\n
除了\n以外还有\r,\r是干什么的呢?
window系统按一个回车,在系统底层相当于一个 \r\n,这个回车代表行结束了(换行了),
但是在linux操作系统里面,一个回车只有一个\n,这是一个小区别。
\r 是行结束符,但是这样看不出什么效果
var str = "ab\rcdef"; console.log(str); // abcdef
\r\n 字符串就换行了
var str = "ab\r\ncdef"; console.log(str);
\t
还有\t是table的缩写,"teb键"也是table的缩写,是"制表符"的意思,
一个\t代表一个缩进、二个\t代表两个缩进,一个缩进一般情况下代表四个空格,根据操作系统而定。
var str = "ab\ttcdef"; console.log(str); var str = "ab\t\tcdef"; console.log(str); var str = "abt\t\t\tcdef"; console.log(str);
还有什么\f等一大堆
先记着这几个
\r 行结束
\n 是换行
\t 是制表符
4、多行字符串
打印多行字符串用\n,想把字符串变成多行"ab\ncdef",这种多行是在真正的结果上实现多行,但这种东西往往没有意义,真正有意义的是在编程上让字符串换行
比如,在body里面写dom结构,dom结构要符合一个原则好维护,好维护就希望字符是串多行的
document.body.innerHTML = "<div> <span></span> </div>";
但是上面这样写,报低端语法解析错误Uncaught SyntaxError: Invalid or unexpected token,系统规定字符串是不能多行显示的
所以必须这么写,这么写就没意义了
document.body.innerHTML = "<div><span></span></div>";
有什么办法又能写多行字符串又不能报错怎么办呢?还得依赖于转义字符,在每一行的结束加一个"转义字符",它会把每一行后面文本形式的回车转义掉,让它不再是是回车
document.body.innerHTML = "\ <div>\ <span></span>\ </div>\ ";
所以有了转义字符放到每一行后面之后,多行字符串就可以实现了,并输出到body标签里面
直接把多行字符串赋给一个变量text,打印text变量到控制台
var test = "\ <div>\ <span></span>\ </div>\ "; console.log(test);
在控制台看是一行的字符串,但写的时候是多行写的
当然还有一些多行的办法,比如完全用字符串连接的方法用加号也能换号,但这么写比较low了
var text = '<div>' + '<span></span>' + '</div>'; console.log(text);
这个转义字符能做的事很多,基本上通用的常用的也就这么多。