最近在看jquery的源码,里面包含了很多正则表达式,特意抽时间来整理下正则表达式相关知识。
简介
正则表达式是一种根据某种特定规则来检测或替换那些符号的文本,可以通过简单的办法来实现强大的功能。在编程开发和平常的计算机使用过程中都很常见,比表单验证、文件搜索、字符查找与替换等,都可以通过简单的正则表达式来实现复杂的功能,提升效率。
正则字符介绍
正则表达式的表现主要是通过字符来构造规则。以下表格包含了所有元字符:
| 字符 | 描述 |
|---|---|
| \f | 匹配一个换页符 |
| \n | 匹配一个换行符 |
| \r | 匹配一个回车符 |
| \s | 匹配一个空白符 |
| \S | 匹配一个非空白符 |
| \t | 匹配一个制表符 |
| \v | 匹配一个垂直制表符 |
| ^ | 匹配输入字符的开始位置,如果是在[]中,表示不包括该字符,如果要表示^本身,需要在前面加上\ |
| $ | 串结尾为指定字或者匹配行,比如b$,是以b结尾的字符串 |
| \ | 将\后面的字符标记为特殊字符 |
| * | 表示前面的子表达式出现0次或者多次 |
| + | 表示前面的子表达式或字符出现1次或者多次 |
| ? | 表示前面的子表达式或字符出现0次或者1次 。当出现在限定符(*, +, ?, {n}, {n,}, {n,m})后面时,表示尽可能少的匹配字符,如果没有?将默认为贪婪模式 ,将尽可能多的进行匹配 |
| {n} | 表示前面的子表达式或字符重复出现n次 |
| {n,} | 表示前面的子表达式或字符至少出现n次 |
| {n,m} | 表示前面的子表达式或字符至少出现n次,最多出现m次 |
| . | 匹配除换行符(\n,\r)以外的所有字符 |
| \b | 匹配字符边界,就是指字符和空格之间。比如‘a b c’,用\bb\b匹配字符b |
| \B | 匹配非字符边界 ,比如‘a b c’,用\bb\b匹配时将无法 匹配到 |
| \d | 匹配数字字符 |
| \D | 匹配非数字字符 |
| \w | 匹配字母、数字、下划线 |
| \W | 匹配非字母、数字、下划线 |
| { | 标记限定符表达式的开始 |
| | | 指明两项之间的一个选择 |
| [] | 字符集合。匹配所包含的任意一个字符 |
| [^] | 负值字符集合。匹配未包含的任意字符。 |
| [a-z] | 限定一个范围,匹配范围内的,如a-z表示所有小写字母 |
| [^a-z] | 负值字符范围。匹配任何不在指定范围内的任意字符。 |
| ( ) | 表示一个子表达式的开始和结束,用于分组 |
| (?:x) | 匹配x,但不记住x的匹配项,意思就是用$1获取不到的。 |
| x(?=y) | 匹配x,但只有x后面跟着y时才能匹配到 ,如‘xyz’,能匹配到x |
| x(?!y) | 匹配x,但后面不跟着y时才匹配 ,如‘xyz’,不能匹配到x |
| (?<=y)x | 匹配x,前面是y时才匹配 ,如‘yxz,能匹配到x |
| (?<!y)x | 匹配x,前面不是y时才匹配 ,如‘y1xz’,能匹配到x |
更详细的参考MDN字符介绍
正则表达式标志
正则表达式有几个可选参数进行全局和不分大小写搜索,这些参数可以单独使用,也可以一起使用。
| 标志 | 描述 |
|---|---|
| g | 全局搜索 |
| i | 不区分大小写搜索 |
| m | 多行搜索 |
| s | 允许.匹配换行符 |
| u | 使用unicode码的模式进行匹配 |
| y | 执行“粘性”搜索,匹配从目标字符串的当前位置开始,可以使用y标志 |
JS中使用正则表达式
在JS中经常会用到正则表达式,用的最多的就是表单验证和字符串替换。
创建正则表达式
创建正则表达式有两种方法:
1.字面量表示法
元字符包含在斜杠之间,如下所示:
var reg = /\d/g;
1.RegExp
调用RegExp的构造函数来创建对象,如下所示:
var reg = new RegExp("\\d",'g');
正则表达式常用方法
使用正则表达式方法的对象主要是RegExp和String,RegExp主要包括 exec,test方法,String包括match、replace、search 和 split方法。具体用法如下所示:
| 方法 | 描述 |
|---|---|
| exec | 根据正则表达式对字符串进行匹配,如果能匹配到就返回一个数组,没匹配到就返回null |
| test | 根据正则表达式对字符串进行匹配,如果能匹配到就返回true,没匹配到就返回false |
| match | 字符串执行该方法,将匹配到的字符全部添加到数组中,如果没匹配到,就返回null |
| matchAll | 字符串执行该方法,匹配结果是返回一个迭代器 |
| replace | 替换匹配到的字符 |
| search | 返回匹配到的索引位置 |
| split | 根据匹配结果,将字符串进行分组 |













网友评论