有些知识,咱们只须要付出一点点时间,把它掌握了,会大大提升咱们的效率,节省咱们的时间。正则表达式就是这样的知识,可是,做为入行好几年的我来讲,正则表达式一直是一头雾水,今天决定把它好好研究研究。正则表达式
正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在不少文本编辑器里,正则表达式一般被用来检索、替换那些匹配某个模式的文本。编辑器
通俗来说:正则表达式是一组由字母和符号组成的特殊文本, 它能够用来从文本中找出知足你想要的格式的句子.函数
Javascript 经过内置对象RegExp支持正则表达式,有两种方法实例化RegExp对象code
const reg = /\bqing\b/g
regexp
const reg = new RegExp('\\bqing\\b','g')
cdn
正则表达式主要依赖于元字符. 元字符不表明他们自己的字面意思, 他们都有特殊的含义. 一些元字符写在方括号中的时候有一些特殊的意思. 如下是一些元字符的介绍:对象
点运算符匹配除了换行符之外的任意字符blog
方括号用来指定一个字符集,在方括号中使用连字符来指定字符集的范围,而且方括号中的字符集不关心顺序ip
通常来讲^表示一个字符串的开头,但当它用在方括号里面的时候,表示否认的关系。好比[^ar]匹配一个后面跟着ar的除了c的任意字符。字符串
*号匹配在 *以前的字符出现大于等于0次,就是出现0次或屡次
+号匹配+号以前的字符出现 >=1 次.
?表示在?以前的字符为可选,即表示出现0次或者1次。好比[T]?he
匹配字符串he和The。
在正则表达式中 {} 是一个量词, 经常使用来一个或一组字符能够重复出现的次数. 例如, 表达式 [0-9]{2,3} 匹配最少 2 位最多 3 位 0~9 的数字.
正则表达式支持必定的范围规则好比[a-z] [0-9] [A-Z]
反斜线 \ 在表达式中用于转码紧跟其后的字符. 用于指定 { } [ ] / \ + * . $ ^ | ? 这些特殊字符. 若是想要匹配这些特殊字符则要在其前面加上反斜线 .
字符 | 含义 |
---|---|
^ | 以^后面的字符开头 |
$ | 以$前面的字符结尾 |
\b | 单词边界,指[a-zA-Z0-9]以外的字符 |
\B | 非单词边界 |
修饰符 | 描述 |
---|---|
i | 忽略大小写 |
g | 全局搜索 |
m | multiple lines多行匹配 |
正则表达式提供一些经常使用的字符集简写. 以下:
简写 | 描述 |
---|---|
. | 除换行符外的全部字符 |
\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 | 匹配一个制表符 |
正则表达式默认采用贪婪匹配模式,在该模式下意味着会匹配尽量长的子串。咱们可使用 ? 将贪婪匹配模式转化为惰性匹配模式。
正则表达式中有前瞻(Lookahead)和后顾(Lookbehind)的概念,这两个术语很是形象的描述了正则引擎的匹配行为。须要注意一点,正则表达式中的前和后和咱们通常理解的先后有点不一样。一段文本,咱们通常习惯把文本开头的方向称做“前面”,文本末尾方向称为“后面”。可是对于正则表达式引擎来讲,由于它是从文本头部向尾部开始解析的(能够经过正则选项控制解析方向),所以对于文本尾部方向,称为“前”,由于这个时候,正则引擎还没走到那块,而对文本头部方向,则称为“后”,由于正则引擎已经走过了那一块地方。
定义一个正向前瞻要使用(),在括号内部使用一个问好和等号:(?=xxx)
负向前瞻只须要把正向前瞻的=改为! 即(?!xxx)
表达式 (T|t)he(?!\sfat) 匹配 The 和 the, 且其后不跟着 (空格)fat.
定义一个正向后顾要使用(),在括号内部使用一个问好、小于号和等号?<=xxx
用于筛选全部匹配结果, 筛选条件为 其前跟随着断言中定义的格式. 例如, 表达式 (?<=(T|t)he\s)(fat|mat) 匹配 fat 和 mat, 且其前跟着 The 或 the.
和正向后顾类似,只须要把=改为!,?<!
用于筛选全部匹配结果, 筛选条件为 其前不跟随着断言中定义的格式. 例如, 表达式 (?<!(T|t)he\s)(cat) 匹配 cat, 且其前不跟着 The 或 the.
/^1[34578][0-9]{9}$/
/http:(\/\/.+\.com)/
/^(\d{4})[/-](\d{2})[/-](\d{2})$/