常用正则表达式整理
先说说规则
元字符
.
代表单个通配符 代表任意字符。匹配除换行之外的任何东西。
/
代表转义符
|
代表分支
\
对下一字符取非(通常是普通变特殊,特殊变普通)
重复
一般情况下,重复仅被用在重复元字符前面的单个字符上,除非使用分组功能
懒惰匹配和贪婪匹配
正则表达式默认是贪婪的。所有的重复元字符后面加一个?
,都看可以变成懒惰匹配。
*
匹配前面的字符或者子表达式0次或多次
*?
惰性匹配上一个
+
匹配前一个字符或子表达式1次或多次
+?
惰性匹配上一个
?
匹配前一个字符或子表达式0次或1次
{n}
匹配前一个字符或子表达式n次
{n.}
匹配前一个字符N个或n个以上
{n,}
匹配前一个字符或者子表达式至少n次
{n,}?
前一个的惰性匹配
{m,n}
匹配前一个字符或子表达式至少m次至多n次
^
匹配字符串的开头
-
代表范围省略 如0-9 就是0到9
字符集
[ ]
匹配内部的任一字符或子表达式
[^]
对字符集和取非 - 定义一个区间
具名字符集
\d
匹配任意数字 等同于[0-9]\d 等同于[0-9]
\D
匹配数字以外的字符 等同于[^0-9]匹配非数字
\w
===[a-z0-9A-Z_]
匹配任意数字字母下划线 等同于匹配大小写字母、数字和下划线
\W
===[^a-z0-9A-Z_]
不匹配数字字母下划线 等同于上一条取非
\s
=== [\t\v\n \r]
包含制表符、空格和垂直制表符
\S
===[^\t\v\n \r]
经常用它来确保必填字段中有数据
[\s\S]
能匹配任何东西
分组
()
分组功能。
捕获组:
非捕获组:(?:【RegExp】)
eg:test.match(/[a-z]+(?:\.com|\.org|\.edu)/i);
匹配后缀为.com、.org、.edu后缀的域名
\A
匹配字符串开头
$
匹配字符串结束
[\b]
退格字符
\c
匹配一个控制字符
\t
匹配制表符
修饰符
/i
(忽略大小写、非规范写法)
/g
(全文查找出现的所有匹配字符)
/m
(多行查找)
/gi
(全文查找、忽略大小写)
/ig
(全文查找、忽略大小写)
ES6
/u
Unicode模式
/y
粘连(sticky),类似于g
,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。g
是剩余位置中存在匹配就行,而y
会确保匹配必须从剩余位置的第一个位置开始。
替换组
例子1:
// 去掉a标签中除href以外的内容
let html = '<a class='nope' href="/yep">yep</a>';
html = html.replace(/<a.*?(href=".*?").*?>/,'<a $1>')
例子2
// 保留class属性和href属性
let html = '<a class="yep" href="/yep" id="nope">yep</a>';
html = html.replace(/<a.*?(class=".*?").*?(href=".*?").*?>/,'<a $2 $1>')
除了$1
、$2
这种组引用,还有 $`
(匹配之前的所有内容)
$&
匹配目标本身
$'
匹配之后所有内容
$$
使用一个美元符号
替换函数
能够将复杂正则表达式拆分成一些简单的正则表达式
锚点
^
开始锚点
$
结束锚点
单词边界匹配
\b
单词边界匹配
\B
单词边界匹配取反 ``````
/\bcount/ count\countdown
/\bcount\B/ countdown
/\Bcount\b/ discount\recount
/\Bcount\B/ accountable
向前查找
(?=<subexpression>)
(?!=<subexpression>) //否定向前查找
动态构造正则表达式
反向引用 (不常用)
const promo = "Opening for XAAX is the dynamic GOOG! At the box office now!";
const bands = promo.match(/(?:[A-Z])(?:[A-Z])\2\1/g);
常用正则表达式
1开头的11位手机号码
^1[0-9]{10}$
只能是 数字或字母或其组合
[0-9a-zA-Z]
只能是 数字或字母或其组合且4-23位
[0-9a-zA-Z]{4,23}
排除全数字
(?!^\d+$)
排除全字母
(?!^[a-zA-Z]+$)
判断是否是 纯空格
^[ ]+$
固话号码验证
^[1-9][0-9]?(.\d)?$//从1开始,匹配2位数字,可以带1位小数
^[1-9][0-9]?//从1开始,匹配2位数字,
表达式: ^(0\d{2,3}-\d{7,8}(-\d{3,5}){0,1})|(((13[0-9])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8})$
验证能验证:
1:010-12345678 的情况
2:0123-12345678的情况。
3:正常的手机号13号段,15号段。18号段的号码。
4:能在固话后面添加分机号验证。 我当前设置的规则是只验证3到5位的分机号 如:010-12345678-0123 可以通过