js-进阶 正则表达式

正则表达式正则表达式

 

一、为何须要正则表达式数组

 

由于咱们经常要对用户输入的字符串进行匹配,看用户输入是否符合咱们的要求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}

  • 至少出现1次,或者1次以上 至关于{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