正则表达式
只对字符串匹配起作用
正则的创建方式
- 字面量创建(双斜杠)
/\d+/
new RegExp(pathern[,flags])
pathern:
必传参数,以\\
开关,
new RegExp("\\d+",i)
flags:
匹配模式g,i,m
正则表达式方法
/*常用正则方法*/
//1,test()方法用于检测一个字符串是否满足某个模式,有则返回true,无返回false
"lihai".test(/i+/g)//true
//2.exec()方法用于匹配字符串,该函数返回一个数组。如果未找到时返回null
//注意:exec方法要连续匹配才能返回所有满足模式的字符串
let a = "lihai";
let reg = /i+/g;
reg.exec(a)//["i", index: 1, input: "lihai", groups: undefined]
reg.exec(a)//["i", index: 4, input: "lihai", groups: undefined]
match()
方法,它并不是正则的方法,属于字符串方法。可在字符串内检索指定的值,
"[]]".match(/\]/g);// ["]", "]"],将匹配的全部放入一个数组中
"[]]".match(/\]/);//["]", index: 1, input: "[]]", groups: undefined] 返回一个类似正则方法exec()返回的数组
正则表达式组成部分
-
元字符
/*常用的元字符*/ //1. 量词元字符设置出现的次数 * 零到多次 + 一到多次 {n} 恰好n次 {n,} 至少n次 {n,m} n到m次 ? 零次或1次 //2.特殊元字符,单个或者组合在一起代表特殊含义 \ 转义字符 . 除\n(换行符)以外的任意字符 ^ 以哪个字符开关 & 以哪个字符结束 \n 换行符 \d 0~9之间的一个数字 \D 非0~9之间的数字(大写与小写意思相反) \w 数字,字母,下划线中的任意字符 \W 非数字,字母,下划线中的任意字符 \s 一个空白字符(包括空格,制表符,换页符\f) \t 一个制表符(一个tab键:四个空格) \b 匹配一个单词的边界 x|y x或者y中的一个字符 [xyz] x或y或z中的一个字符 [^xy] 除了x,y以外的任意字符 [a-z] a-z范围内的任意字符 [0-9a-zA-Z_]===\w [^a-z] 非a-z范围内的任意字符 () 正则中的分组符号 (?:) 只匹配不捕获 (?=) 正向预查 (?!) 负向预查 //3.普通元字符 /lihai/ 只匹配lihai
-
修饰符
/*常用的修饰符 img */ i 忽略单词大小写匹配 m 可以进行多行匹配 g 全局匹配 // /A/.test("lihai")//false // /A/i.test("lihai")//true
解析元字符
^ $
let reg = /^\d/;//以0-9任意一个数字开头
console.log(reg.test("hia"))//false
console.log(reg.test("10hei"))//true
let reg = /\d$/;//以0-9任意一个数字结束
reg.test("12la20")//true
// ^/$都加表示
let reg = /^\d$/;//以0-9任意一个数字开头,以0-9任意一个数字结束
reg.test("m")//false
reg.test("0")//true
//验证手机号码,11位
let reg = /^1\d{10}$/;
\
转义字符
let reg1 = /^2.3$/;// . 表示除\n(换行符)以外的任意字符
//\.进行转义表示.
let reg2 = /^2\.3$/;
reg1.test("2.3")//true
reg2.test("2.3")//true
reg1.test("233")//true
reg.test("233")//false
//字符串"\"也要用\进行转义,否则报错
let a = "\d" //d
let a = "\n" // 回车
//匹配字符串\d
let str = "\\d";
let reg = /^\\d$/;// \d表示0-9的数字范围,要用\进行转义
x|y
:x或者y
let reg = /^18|23$/;//可能你会认为表示以18或23开头结束 ,但事实并非如此,这里有很乱的优先级。
//可以表示
//18开头
//20结束
//1开头 8或2 3结束...
//所以一般用()括起来,分组
let reg = /^(18|23)$/;//只能表示以18或23开头结尾
[]
//1.[]中出现的字符一般都代表本身的含义
let reg = /^[@+]+$/;//[]中的+号就是+号本身意思,并不是表示1个或多个了
reg.test("@@")//true;
//如果是:
reg = /^[@+]$/;//要么是@要么是+
reg.test("@@");//false
//特殊情况:\d在[]中还是\d特殊的含义
reg = /^[\d]$/;
reg.test("m")//false
reg.test("2")//true
reg = /^[\\d]$/;// 用\进行转义了
reg.test("\\")//true,在字符串中“\”会报错
//2.[]中不存在多位数
reg = /^[18]$/;
reg.test("1")//true
reg.test("8")//true
reg.test("18")//false
reg= /^[10-29]$/;//1或0-2或9
reg.test("1")//true
reg.test("0")//true
reg.test("9")//true
reg.test("10")//false