常用正则表达式整理

先说说规则

元字符

. 代表单个通配符 代表任意字符。匹配除换行之外的任何东西。
/ 代表转义符
| 代表分支
\ 对下一字符取非(通常是普通变特殊,特殊变普通)

重复

一般情况下,重复仅被用在重复元字符前面的单个字符上,除非使用分组功能

懒惰匹配和贪婪匹配

正则表达式默认是贪婪的。所有的重复元字符后面加一个?,都看可以变成懒惰匹配。

*匹配前面的字符或者子表达式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 可以通过
posted @ 2019-08-04 22:40  marvelousone  阅读(308)  评论(0编辑  收藏  举报