js-进阶 正则表达式

Posted opacity-m

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js-进阶 正则表达式相关的知识,希望对你有一定的参考价值。

正则表达式

 

1、为什么需要正则表达式

 

因为我们常常要对用户输入的字符串进行匹配,看用户输入是否符合我们的要求

 

2、什么是正则表达式

所谓正则表达式,就是用于字符串中的 信息进行查找,替换和提取等操作。

创建正则表达式的方式,有两种,字面量,对象创建

 

字面量创建:

 

语法:let parttern=/正则规则/模式修正符

 

reg.test()

 

对象创建:

 

语法:let = new RegExp(”正则规则”,”模式修饰符”);

 

 

3、正则表达式的组成部分

 

如果是字面量创建正则的方式,正则可以分为4个部分:定界符//,原子at,元字符,模式修正符(前两个必须要写)

 

如果是对象方式创建的正则,那么就由3个部分组成:原子、元字符、模式修正符

 

4、定界符

 

就是约定正则表达式开始和结束的地方,使用的是一个斜杠(/)

 

5、原子

 

原子就是普通的字符,换句话说,正则里面写了什么原子,那么字符串就必须要出现这个字符。

 

 

6、元字符

 

就是有特殊含义的字符(+*?)

 

 

7、模式修正符

 

对正则表达式进行一定的扩充

i就是一个模式修正符,它可以忽略大小写

 

 

正则表达式类型和数组相同,无论哪种方式创建,返回类型都是object

 

 

元字符作为原子

方法很简单,元字符前面添加一个转译字符(\)

 

 

 

8、元字符具体符号

 

(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

 

以上是关于js-进阶 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Python正则表达式------进阶

JavaScript 进阶第十一章(正则表达式)(完结)

正则表达式进阶——你从没想过的正则表达式使用方式

正则进阶

快速掌握正则表达式 | 02 掌握进阶的匹配操作

快速掌握正则表达式 | 02 掌握进阶的匹配操作