正则表达式正则表达式
一、为何须要正则表达式数组
由于咱们经常要对用户输入的字符串进行匹配,看用户输入是否符合咱们的要求spa
二、什么是正则表达式对象
所谓正则表达式,就是用于字符串中的 信息进行查找,替换和提取等操做。排序
建立正则表达式的方式,有两种,字面量,对象建立字符串
字面量建立:console
语法:let parttern=/正则规则/模式修正符class
reg.test()test
对象建立:object
语法:let = new RegExp(”正则规则”,”模式修饰符”);
三、正则表达式的组成部分
若是是字面量建立正则的方式,正则能够分为4个部分:定界符//,原子at,元字符,模式修正符(前两个必需要写)
若是是对象方式建立的正则,那么就由3个部分组成:原子、元字符、模式修正符
四、定界符
就是约定正则表达式开始和结束的地方,使用的是一个斜杠(/)
五、原子
原子就是普通的字符,换句话说,正则里面写了什么原子,那么字符串就必需要出现这个字符。
六、元字符
就是有特殊含义的字符(+*?)
七、模式修正符
对正则表达式进行必定的扩充
i就是一个模式修正符,它能够忽略大小写
正则表达式类型和数组相同,不管哪一种方式建立,返回类型都是object
元字符做为原子
方法很简单,元字符前面添加一个转译字符(\)
八、元字符具体符号
(1)字符组
使用方括号来进行表示。表明方括号里面的原子出现一个便可
let reg=/[abcd]/;
console.log(reg.test(“acc”));
范围:在字符组里面,正则表达式使用一个-来表示范围,能够简化字符组。
1.1 范围按照的是ASCLL码从小到大的排序,因此不能反着写。
1.2 在一个字符组里面能够书写多个范围
1.3 -只有在字符组里面才表明范围,若是出了字符组,那表明它原来的意思
排除:主要用于字符组里面,表明除了什么以外,用来表示^来表示
【^ 0-9】
排除符号书写在【后面,若是书写的位置不在它后面,则不表明排除,而表明它原来的意思
(2) 简记
对于0-9 ,a-z这种经常使用的,正则里面提供了默认的简单书写方式
\d:等同于[0-9],用于匹配数字
\D:等同于[^0-9],匹配非数
let reg=/^\dab/;
\s:表明匹配空白字符
\S:匹配非空白字符
\w:匹配数字字母下划线,等同于[0-9A-Za-z_]
\W:匹配非数字字母下划线。等同于[^0-9A-Za-z_]
(3) 点符号
点是匹配除了回车,换行,制表符之外的任意字符
匹配任意字符: [\d\D] [\w\W] [\s\S]
(4) 量词 (就是指的前面那个字符)
指定一个东西匹配多少次
{n} 匹配n次
{n.m}匹配至少n次,最多m次;
{n,}匹配至少n次
?能够出现,也能够不出现,至关于{0,1}
* 匹配0次或者屡次 至关于 {0, }
贪婪模式和懒惰模式
贪婪模式:默认状况喜好,量词的匹配都是贪婪模式,所谓贪婪,就是指能匹配多少个,就匹配多少个。(默认)
reg.exec(str);
懒惰模式:只要匹配上一个,就返回,后面的再也不进行匹配
开启懒惰模式,只须要在量词后面添加一个?便可
(5)括号
两个功能:分组和引用
分组:就是将小原子组合成一个大的原子
let reg=/(ab){2}/;
捕获:括号不只用于分组,还会保存每一个分组所匹配的文本。等到匹配完成以后,能够引用捕获到的文本,经过$数字,默认是9个,分别对应$1-$9
RegExp.$ 1.2.3….
let reg=/(\d{4})-(\d{2})-(\d{2})/;
console.log(reg.test("2017-11-20"));
console.log(RegExp.$1);
console.log(RegExp.$2);
console.log(RegExp.$3);
反向引用:首先,这个仍是和捕获的内容有关。咱们能够对捕获的内容进行一个反向的引用,经过\数字来引用括号里面的内容
let reg=/(ab)(cd)\2/;
console.log(reg.test("abcdcd"))//true
非捕获(跳过某一个子表达式)使用?: 括号称为子表达式
let reg=/(?:ab)(cd)\1/;
console.log(reg.test("abcdcd"))//
()起始和结束****
若是是开始,使用^,若是是结束,使用$
let reg=/^\d{6}$/;
console.log(reg.test("610000"))
//匹配用户名 字母开头 5-8 长度不小于5
let reg=/^[a-z]\w{4,7}$/i;
选择:或者 |
须要注意:选择(|)的优先级是最低的,因此上看的正则匹配到的是ab或者cd,而不是a和b