正则表达式?这一篇就够了

有些知识,咱们只须要付出一点点时间,把它掌握了,会大大提升咱们的效率,节省咱们的时间。正则表达式就是这样的知识,可是,做为入行好几年的我来讲,正则表达式一直是一头雾水,今天决定把它好好研究研究。正则表达式

1.什么是正则表达式

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在不少文本编辑器里,正则表达式一般被用来检索、替换那些匹配某个模式的文本。编辑器

通俗来说:正则表达式是一组由字母和符号组成的特殊文本, 它能够用来从文本中找出知足你想要的格式的句子.函数

2.js中Regexp对象

Javascript 经过内置对象RegExp支持正则表达式,有两种方法实例化RegExp对象code

2.1字面量方法

const reg = /\bqing\b/gregexp

2.2构造函数

const reg = new RegExp('\\bqing\\b','g')cdn

3.正则表达式语法

3.1 元字符

正则表达式主要依赖于元字符. 元字符不表明他们自己的字面意思, 他们都有特殊的含义. 一些元字符写在方括号中的时候有一些特殊的意思. 如下是一些元字符的介绍:对象

点运算符 .

点运算符匹配除了换行符之外的任意字符blog

3.2 字符类

[]

方括号用来指定一个字符集,在方括号中使用连字符来指定字符集的范围,而且方括号中的字符集不关心顺序ip

否认字符类

通常来讲^表示一个字符串的开头,但当它用在方括号里面的时候,表示否认的关系。好比[^ar]匹配一个后面跟着ar的除了c的任意字符。字符串

3.3 重复次数

3.3.1 *字符

*号匹配在 *以前的字符出现大于等于0次,就是出现0次或屡次

3.3.2 +字符

+号匹配+号以前的字符出现 >=1 次.

3.3.3 ?字符

?表示在?以前的字符为可选,即表示出现0次或者1次。好比[T]?he匹配字符串he和The。

3.4 {} 号

在正则表达式中 {} 是一个量词, 经常使用来一个或一组字符能够重复出现的次数. 例如, 表达式 [0-9]{2,3} 匹配最少 2 位最多 3 位 0~9 的数字.

3.5 范围类[-]

正则表达式支持必定的范围规则好比[a-z] [0-9] [A-Z]

3.6 | 或运算符

3.7 转码特殊字符

反斜线 \ 在表达式中用于转码紧跟其后的字符. 用于指定 { } [ ] / \ + * . $ ^ | ? 这些特殊字符. 若是想要匹配这些特殊字符则要在其前面加上反斜线 .

3.8 边界

字符 含义
^ 以^后面的字符开头
$ 以$前面的字符结尾
\b 单词边界,指[a-zA-Z0-9]以外的字符
\B 非单词边界

3.9 修饰符(i, g, m)

修饰符 描述
i 忽略大小写
g 全局搜索
m multiple lines多行匹配

4. 简写字符集

正则表达式提供一些经常使用的字符集简写. 以下:

简写 描述
. 除换行符外的全部字符
\w 匹配全部字母数字,等同于[a-zA-Z0-9]
\W 匹配全部非字母数字,即符号,等同于[^\w]
\d 匹配数字: [0-9]
\D 匹配非数字:[^\d]
\s 匹配全部空格字符,等同于: [\t\n\f\r\p{Z}]
\S 匹配全部非空格字符: [^\s]
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个会车符
\t 匹配一个制表符

5. 贪婪匹配与惰性匹配 (Greedy vs lazy matching)

正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽量长的子串。咱们可使用 ? 将贪婪匹配模式转化为惰性匹配模式。

6. 零宽度断言(先后预查)

正则表达式中有前瞻(Lookahead)和后顾(Lookbehind)的概念,这两个术语很是形象的描述了正则引擎的匹配行为。须要注意一点,正则表达式中的前和后和咱们通常理解的先后有点不一样。一段文本,咱们通常习惯把文本开头的方向称做“前面”,文本末尾方向称为“后面”。可是对于正则表达式引擎来讲,由于它是从文本头部向尾部开始解析的(能够经过正则选项控制解析方向),所以对于文本尾部方向,称为“前”,由于这个时候,正则引擎还没走到那块,而对文本头部方向,则称为“后”,由于正则引擎已经走过了那一块地方。

6.1 正向前瞻

定义一个正向前瞻要使用(),在括号内部使用一个问好和等号:(?=xxx)

6.2 负向前瞻

负向前瞻只须要把正向前瞻的=改为! 即(?!xxx) 表达式 (T|t)he(?!\sfat) 匹配 The 和 the, 且其后不跟着 (空格)fat.

6.3 正向后顾

定义一个正向后顾要使用(),在括号内部使用一个问好、小于号和等号?<=xxx 用于筛选全部匹配结果, 筛选条件为 其前跟随着断言中定义的格式. 例如, 表达式 (?<=(T|t)he\s)(fat|mat) 匹配 fat 和 mat, 且其前跟着 The 或 the.

6.4 负向后顾

和正向后顾类似,只须要把=改为!,?<!

用于筛选全部匹配结果, 筛选条件为 其前不跟随着断言中定义的格式. 例如, 表达式 (?<!(T|t)he\s)(cat) 匹配 cat, 且其前不跟着 The 或 the.

7.应用

7.1 手机号正则

/^1[34578][0-9]{9}$/

7.2 URL分组替换

/http:(\/\/.+\.com)/

7.3 日期匹配与分组替换

/^(\d{4})[/-](\d{2})[/-](\d{2})$/

相关文章
相关标签/搜索