正则表达式学习小结(JS)

作者: JONE 分类: 前端学习 发布时间: 2017-09-17 16:56

一、在正则表达式中,匹配模式常用的有两种形式:

g :global缩写,代表全局匹配,匹配出所有满足条件的结果

i :ignore缩写,代表忽略大小写,匹配时,会自动忽略字符串的大小写

二、几个重要的概念

1、子表达式

在正则表达式中,通过一对圆括号括起来的内容,我们就称之为“子表达式”。如:

var reg = /\d(\d)\d/gi;

2、捕获

在正则表达式中,子表达式匹配到相应的内容时,系统会自动捕获这个行为,然后将子表达式匹配到的内容放入系统的缓存区中。我们把这个过程就称之为“捕获”。

3、反向引用

在正则表达式中,我们可以使用\n(n>0,正整数,代表系统中的缓冲区编号)来获取缓冲区中的内容,我们把这个过程就称之为“反向引用”。

4、几个重要概念的示例

例1:查找连续的四个数字,如:3569

答:var  reg  =  /\d\d\d\d/gi;

例2:查找数字,如:1221,3443

答:var  reg  =  /(\d)(\d)\2\1/gi;

例3:查找字符,如:AABB,TTMM

(提示:在正则表达式中,通过[A-Z]匹配A-Z中的任一字符)

答:var  reg  =  /([A-Z])\1( [A-Z])\2/g;

例4:查找连续相同的四个数字或四个字符

(提示:在正则表达式中,通过[0-9a-z])

答:var  reg  =  /([0-9a-z])\1\1\1/gi;

三、编写正则表达式

1、正则表达式的组成

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

var  reg  =  /\d/gi;

2、编写正则表达式三步走

① 查什么

② 查多少

③ 从哪查

3、查什么(匹配符)

匹配符:字符匹配符用于匹配某个或某些字符

在正则表达式中,通过一对中括号括起来的内容,我们就称之为“字符簇”。字符簇代表的是一个范围,但是匹配时,只能匹配某个固定的结果。

[a-z] :匹配字符a到字符z之间的任一字符

[A-Z] :匹配字符A到字符Z之间的任一字符

[0-9] :匹配数字0到9之间的任一数字

[0-9a-z] :匹配数字0到9或字符a到字符z之间的任一字符

[0-9a-zA-Z] :匹配数字0到9或字符a到字符z或字符A到字符Z之间的任一字符

[abcd] :匹配字符a或字符b或字符c或字符d

[1234] :匹配数字1或数字2或数字3或数字4

在字符簇中,通过一个^脱字节来表示取反的含义。

[^a-z] :匹配除字符a到字符z以外的任一字符

[^0-9] :匹配除数字0到9以外的任一字符

[^abcd] :匹配除a、b、c、d以外的任一字符

几个比较特殊的匹配符

\d :匹配一个数字字符,还可以使用[0-9]

\D :匹配一个非数字字符,还可以使用[^0-9]

\w :匹配包括下划线的任何单词字符,还可以使用[0-9a-zA-Z_]

\W :匹配任何非单词字符,还可以使用[^\w]

\s :匹配任何空白字符,space缩写

\S :匹配任何非空白字符,还可以使用[^\s]

.(我是一个点号)  :匹配除 “\n” 之外的任何单个字符

[\u4e00-\u9fa5] :匹配中文字符中的任一字符

4、差多少(限定符)

什么是限定符?

限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

* :匹配前面的子表达式零次或多次,0到多,{0,}

+ :匹配前面的子表达式一次或多次,1到多,{1,}

? :匹配前面的子表达式零次或一次,0或1,{0,1}

{n} :匹配确定的 n 次

{n,} :至少匹配n 次

{n,m} :最少匹配 n 次且最多匹配 m 次

5、哪里查(定位符)

什么是定位符?

定位符可以将一个正则表达式固定在一行的开始或结束。也可以创建只在单词内或只在单词的开始或结尾处出现的正则表达式。

^ :匹配输入字符串的开始位置

$ :匹配输入字符串的结束位置

\b :匹配一个单词边界

\B :匹配非单词边界

五、Javascript与正则

1、创建正则对象

① 隐式创建

var 正则对象 = /正则表达式/匹配模式;

② 直接实例化

var 正则对象 = new RegExp(‘正则表达式’, ‘匹配模式’);

问题:隐式创建与直接实例化有什么区别呢?

答:两者之间的功能是完全一致的,都是为了获得正则对象。但是两者之间的区别主要在于语法的不同。

例:求三位连续的数字

隐式创建:

var reg = /\d\d\d/gi;

直接实例化

var reg = new RegExp(‘\\d\\d\\d’);

所以由以上代码可知,两者功能完全一致,唯一的区别在于语法的不同,直接实例化RegExp中,正则表达式需要对反斜杠\进行转义操作。

2、与正则表达式相关的几个方法

① RegExp类下的方法(reg.test或reg.exec)

test(str) :判断字符串中是否具有指定模式的子串,返回结果是一个布尔类型的值

exec(str) :返回字符串中指定模式的子串,一次只能获取一个与之匹配的结果

② String类下的方法(str.方法(reg))

search(reg) :与indexOf非常类似,返回指定模式的子串在字符串首次出现的位置

match(reg) :以数组的形式返回指定模式的字符串,可以返回所有匹配的结果

replace(reg,’替换后的字符’) :把指定模式的子串进行替换操作

split(reg) :以指定模式分割字符串,返回结果为数组

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注