一、^
以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
来源:CSDN
作者:LiuDevelop
链接:https://blog.csdn.net/qq_21980517/article/details/104280747