正则表达式 --- 特殊元字符

别说谁变了你拦得住时间么 提交于 2020-02-12 19:30:58

一、^ 以xxx开头
1、以数字开头时

let reg = /^\d/
let box = "6aaaaaaaa"
console.log(reg.test(box))   // 结果为true

2、以非数字开头时

let reg = /^\d/
let box = "aaaaaaaa"
console.log(reg.test(box))   // 结果为false

二、$ 以xxx结尾
1、以数字结尾时

let reg = /\d$/
let box = "text1"
console.log(reg.test(box))   // 结果为true

2、以非数字结尾时

let reg = /\d$/
let box = "text"
console.log(reg.test(box))   // 结果为false

三、^$ 结合使用时
1、如果都使用,那么要匹配的值必须得是某个规则的才行;
如下代码,\d+原本表示只要包含0到9的数字,且有1个或者多个就行,但是前后都加上了^$,那么此时就表示只能是数字,所以结果为false

let reg = /^\d+$/
let box = "1text2"
console.log(reg.test(box))   // 结果为false

2、当如果只有其中一个元字符时,比如只有^,那么只要是以xxx开头就行,具体的值没有强制规定;
如下代码,开头是^,结尾没有$,那么只要开头是数字即可,反之亦然

let reg = /^\d+/
let box = "1text2"
console.log(reg.test(box))   // 结果为true

四、. 小数点,看似是小数点,其实是除了\n以外的任意字符,其中\n是换行符
1、举例

let reg = /^6.8$/
let box = "6@8"
console.log(reg.test(box))   // 结果为true

2、举例

let reg = /^6.8$/
let box = "6.8"
console.log(reg.test(box))   // 结果为true

3、举例

let reg = /^6.8$/
let box = "68"
console.log(reg.test(box))   // 结果为false

五、\ 转义字符,将普通的转为特殊的,将特殊的转为普通的
1、回头看上面第四个案例,然后对比如下代码,也就是说中间必须得是小数点了,而不能是其它字符

let reg = /^6\.8$/
let box = "6@8"
console.log(reg.test(box))   // 结果为false
let reg = /^6\.8$/
let box = "6.8"
console.log(reg.test(box))   // 结果为true

2、所以,可以直接想到这么写

let reg = /^6\@8$/
let box = "6@8"
console.log(reg.test(box))   // 结果为true

3、写一个比较恶心的例子,如下代码;
正常理解的结果应该是true,但实际结果却为fasle

let reg = /^\\d$/
let box = "\d"
console.log(reg.test(box))   // 结果为false

虽然正则中规定的匹配值为\d,但在字符串中,直接写\d是有特殊含义的,所以正确写法如下:
也就是说在字符串中也进行了转义

let reg = /^\\d$/
let box = "\\d"
console.log(reg.test(box))   // 结果为true

4、同样的恶心的例子:
开头必须为6,中间是除了\n换行符以外的任意字符,结尾是必须为8的值;
所以在字符串中,6开头没问题,中间@符没问题,结尾既可以写\8,也可以直接写8

let reg = /^6.\8$/
let box = "6@\8"
console.log(reg.test(box))   // 结果为true
let reg = /^6.\8$/
let box = "6@8"
console.log(reg.test(box))   // 结果为true

六、x|y() 的结合使用
1、x|y表示只要有其中x或者y的其中一个即可

let reg = /^12|34$/
// let box = "1234"
// let box = "134"
// let box = "124"
// let box = "234"
// let box = "123"
// let box = "12"
// let box = "34"
console.log(reg.test(box))   // 以上结果全都为true

2、上面例子的结果并不是我们想要的,我们想要的是要么以单纯的12开头,要么以单纯的34结尾,此时就需要()分组来解决:

let reg = /^(12|34)$/
// let box = "1234"   // 结果为false
// let box = "134"   // 结果为false
// let box = "124"   // 结果为false
// let box = "234"   // 结果为false
// let box = "123"   // 结果为false
// let box = "12"   // 结果为true
// let box = "34"   // 结果为true

七、[] 中括号出现的字符一般,注意是一般都代表本身的意思
1、举例

let reg = /^[@+]$/
let box = "@"
console.log(reg.test(box))   // 结果为true

2、举例

let reg = /^[@+]$/
let box = "+"
console.log(reg.test(box))   // 结果为true

3、举例,其中中括号里面的+加号此时不再代表一次或者多次,就只代表正常的+加号本身,所以此代码表示只要有@或者+,且有一个或者多个就行

let reg = /^[@+]+$/
// let box = "@"
// let box = "+"
// let box = "@+"
// let box = "@@"
// let box = "@@+"
// let box = "@@++"
console.log(reg.test(box))   // 以上结果都为true

4、比较特殊的,比如\d,在[]中依然代表0到9的数字

let reg = /^[\d+]+$/
let box = "\d"
console.log(reg.test(box))   // 结果为false

所以

let reg = /^[\d+]+$/
// let box = "1"
// let box = "123"
console.log(reg.test(box))   // 以上结果都为true

但是如果对正则中再次进行转义,如下代码的变量reg,此时就代表了单独的\d

let reg = /^[\\d+]+$/
// let box = "99"   // 结果为 false
// let box = "\d"   // 结果为 true
// let box = "\dd"   // 结果为 true
// let box = "\\dd"   // 结果为 true

5、[] 中不存在多位数

let reg = /^[188]$/
// let box = "1"   // 结果为 true
// let box = "8"   // 结果为 true
// let box = "18"   // 结果为 false
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!