创建方式
创建方式有两种
//字面量方式,两个斜杠包起来一些正则元字符
let reg = /\d+/g;
//构造函数方式,注意斜杠转义
let reg = new RegExp("\\d+", "g");
两种创建方式的区别
1、构造函数方式要特别注意反斜杠转义,因为在字符串中 \ 本来就特殊,比如你想输出"\"
let str1 = '\' //会报错
let str2 = '\\' //正确
2、字面量方式不能插入变量,因为//中间的都是正则元字符,所以要插入变量创建正则的话就只能用构造函数方式
let name = 'sam';
let reg1 = /^--+name+--$/;
let reg2 = new RegExp("^--"+name+"--$");
reg1.test('--sam--') //false
reg2.test('--sam--') //true
正则表达式由两个部分组成
元字符
常用量词元字符
* 零到多次
+ 1到多次
? 0次或1次
{n} 出现n次
{n,} 出现n到多次
{n,m} 出现n到m次
特殊元字符
\ 转义字符
. 除\n(换行符)以外的任意字符
^ 以哪个元字符开始
$ 以哪个元字符结束
\n 换行符
\b 单词边界
\d 0-9之间的一个数字
\D 非\d
\w 数字、字母、下划线中任意一个字符
\W 非\w
\s 一个空白字符(包括空格、制表符、换页符等)
\t 一个制表符(Tab键:4个空格)
x|y x或y中的一个字符
[xyz] x或y或z中的一个字符
[^xy] 除了x和y以外的任意字符
[a-z] 指定a-z范围内的任意字符 //[0-9a-zA-Z_]===\w
[^a-z] 非上一个
() 正则中的分组
(?:) 只匹配不捕获
(?=) 正向预查
(?!) 反向预查
修饰符
i ignoreCase 忽略大小写
m multiline 可以多行匹配
g global 全局匹配
或 |
| 直接使用的时候可能会出现一些不确定性,比如:
let reg = /^18|29$/;
reg.test(18) //true
reg.test(29) //true
reg.test(129) //true
reg.test(189) //true
reg.test(229) //true
reg.test(1236629) //true
//这时reg匹配的是/(^18)|(29$)/以18开始或者是29结束
//如果你想匹配的是18或者29,那么
reg = /^(18|29)$/;
所以,避免不确定性,建议在使用 | 时加上小括号。
小括号()
分组,提高优先级,配合 | 使用
参照上文
分组引用
通过"