饥人谷技术博客

正则表达式

2017-11-04  本文已影响0人  squall1744

先上干货,两个强烈推荐网站
正则表达式可视化
正则表达式在线工具

下面是正文了,其实也不是什么正文,就是点总结的笔记吧,其实最精华的就是上面那两个网站,下面大家想看就看不想看就不看了吧

元字符

( [ { \ ^ $ | ) ? * + .

字符 含义
\t 水平制表符
\r 回车符
\n 换行符
\f 换页符
\cX 与X对应的控制字符(Ctrl + X)
\v 垂直制表符
\0 空字符

字符类

一般情况下一个字符对应字符串一个字符,如表达式 abc的含义就是


匹配单个字符串

范围类

使用[]可以表示一类字符

[a-zA-Z0-9] //匹配所有字母(包括大小写)和数字
匹配一类字符

预定义类

字符 等价类 含义
. [^\r\n] 除了回车和换行符之外的所有字符
\d [0-9] 数字字符
\D [^0-9] 菲数字字符
\s [\t\n\x0B\f\r] 空白符
\S [^\t\n\x0B\f\r 非空白符
\w [a-zA-Z0-9_] 单词字符,字母、数字和下划线
\W [^a-zA-Z0-9_] 非单词字符,字母、数字和下划线

学了上面这些类,我们写一些正则表达式就很方便了,比如我们希望匹配一个ab+数字+任意字符,可以这么写:

ab\d.
ab\d.
字符 含义
^ 以xxx开头
$ 以xxx结尾
\b 单词边界
\B 非单词边界

例如,我们要匹配一个字符串为国内手机号可以用下面代码

^1[3578]\d{9}$
匹配国内电话号码

量词

字符 含义
? 出现零次或一次(最多出现一次)
+ 出现一次或多次(至少出现一次)
* 出现零次或多次(任意次)
{n} 出现n次
{n,m} 出现n到m
{n,} 至少出现n次
{,m} 最多出现m次

举例

'a12345678cde'.match(/[a-z]\d?/g)
> ['a1', 'b6', 'c', 'd', 'e']
[a-z]\d?

贪婪模式和非贪婪模式

量词在默认情况下是尽可能多的匹配的,也就是大家说的贪婪模式

'123456789'.match(/\d{3,5}/g)
>['12345', '6789']

非贪婪模式下,正则表达式尽可能少的匹配,做法很简单,在量词后面加上?即可

 '123456789'.match(/\d{3,5}?/g)
 >['123', '456', '789']   

举例

//贪婪模式
'a12345b678ced'.match(/[a-z]\d?/g)
>['a1', 'b6', 'c', 'd', 'e']
//非贪婪模式
'a12345b678ced'.match(/[a-z]\d??/g)
>['a', 'b', 'c', 'd', 'e']

//贪婪模式
'a12345b678ced'.match(/[a-z]\d+/g)
>['a12345', 'b678']
//非贪婪模式
'a12345b678ced'.match(/[a-z]\d+?/g)
>['a1', 'b6']

//非贪婪模式
'a12345b678ced'.match(/[a-z]\d*?/g)
>['a', 'b', 'c', 'd', 'e']

分组

单个字母加量词只能对一个字母匹配多次,有时候我们需要对多个字符同时使用量词,如希望匹配某个单词出现多少次的字符串,我们如果写成word{20}话匹配的是wor+d重复20次

word{20}
word{20}

如果怎样才能把word看成一个整体呢?使用()就可以了,这就是我们所说的分组

(word){20}
(word){20}

我们需要匹配word或者number出现20次怎么弄?使用|即可
(word|number){20}
(word|number){20}

前瞻

正则表达式中的前和后和我们一般理解的前后有点不同。一段文本,我们一般习惯把文本开头的方向称作“前面”,文本末尾方向称为“后面”。但是对于正则表达式引擎来说,因为它是从文本头部向尾部开始解析的,因此对于文本尾部方向,因为这个时候正则引擎还没走到那块,所以他是正则的前方。而对文本头部方向,因为正则引擎已经走过了那一块地方,所以他是正则的后方。如下图所示:

正则表达式的方向

前瞻表达式

表达式 含义
exp1(?=exp2) 匹配后面是exp2的exp1
exp1(?!exp2) 匹配后面不是exp2的exp1

举例

good(?=word)
good(?=word)
(/good(?=game)/).exec('goodgame123'); //['good']
(/good(?=game)/).exec('goodluck123'); //null
(/good(?=game)/).exec('goodmum123'); //null

通过上面的例子可以看出只有在exp1后面的表达式是exp2的时候才会匹配exp1

结束语

关于正则表达式的常用语法,我们就讲完了,其实就常用语法来说,正则表达式并没有什么太多的内容,但是用起来呢就。。。。

上一篇下一篇

猜你喜欢

热点阅读