指尖上的正则表达式2. 产 品事业 部
目标
1.了解正则 表达 式的历 史和现 状
2.熟悉正则 表达 式的语 法
3. 在实际 的开发 中正确运 用相关 API
4. 根据实际 需求,编 写出简单 的正则 表达 式
3. 产 品事业 部
目录
1.正则 表达 式是什么
2.正则 表达 式的语 法 (JavaScript)
3.JavaScript 中的正则 API
4.实 例解析
5. 产 品事业 部
正则 表达 式的定义
模板 / 模式
匹配
引用
6. 产 品事业 部
正则 表达 式的语 法
^$.*+?=!:|/()[]{}
b B d D w W [xyz] [^xyz] [a-z] [^a-z]
{n} {n,} {n,m} (pattern) (?:p) (?=p) (?!p)
f n r s S t v
7. 产 品事业 部
字面量字符 (Literal Characters)
字符 匹配 示例
f 换页符 (u000C)
n 换行符 (u000A)
r 回车 (u000D)
o NUL 字符 (u0000)
t 制表符 (u0009)
v 垂直制表符 (u000B)
xnn 由十六进制数 nn 指定的拉丁字符 x0A 等价于 n
uxxxx 由十六进行 xxxx 指定的 Unicode 字符 u0009 等价与 t
cX 控制字符 (X 的值必须是 A-Z 或 a-z) cJ 等价于换行符 n
8. 产 品事业 部
字符类 (Character Classes)
元字符 行为 示例
[xyz] 位于括号内的任意字符 [abc] 匹配 'plain' 中的 a.
[^xyz] 不在括号之中的任意字符 [^abc] 匹配 'plain' 中的 p.
w 等价于 [a-zA-Z0-9_]
W 等价于 [^a-zA-Z0-9_]
s 任何 Unicode 空白符 [ fnrtv]
S 任何非空白字符 [^ fnrtv]
d 等价于 [0-9]
D 等价于 [^0-9]
9. 产 品事业 部
字符类 (Character Classes)
元字符 行为 示例
[b] 退格直接量 ( 特例 )
. 除换行符和其它 Unicode 换行符之外的任意 a.c matches "abc", "a1c",
字符 ,[sS] 匹配任意字符 and "a-c".
10. 产 品事业 部
重复 (Repetition)
元字符 行为 示例
匹配至少 n 次 , 但不超过 m 次 ,n 和 m 必
{n,m}
须是非负整数 , 且 n<=m
? 等价于 {0,1}
{n,} 匹配至少 n 次 o{2,} 不匹配 'Bob' 中的 'o',
但匹配 'food' 中的 o.
{n} 恰好匹配 n 次 o{2} 不匹配 'Bob' 中的 'o',
但匹配 'food' 中的 o.
? 匹配 0 次或 1 次 , 等价于 {0,1}. zo? 匹配 "z" and "zo", 但
不匹配 "zoo".
+ 匹配 1 次或多次 , 等价于 {1,}. zo+ 匹配 "zo" and "zoo",
但不匹配 "z".
* 匹配 0 次或多次 , 等价于 {0,}. zo* 匹配 "z" 和 "zoo".
11. 产 品事业 部
非贪 婪的重复 (non-greedy)
元字符 行为 示例
*?
o+? 匹配 "oooo" 中的一
+? 在重复字符后加上问号 , 匹配模式就是非贪
个 "o", o+ 则匹配所有的
?? 婪的匹配 . 这种模式会尽可能少的对目标字
"o".
{n}? 符串进行匹配
/a+?b/.exec('aaab')
{n,}?
{n,m}?
12. 产 品事业 部
选择 、分组 和引用
元字符 行为 示例
| ( 选择 ) 匹配该符号左边或右边的子表达式 (z|f)ood 匹配 zood 或 food
( 组合 ) 将几个项目组合成一个单元 , 这个 (A|B) [1-9] 匹配 "A5", 字
(pattern) 单元可由 *,+,? 和 | 等符号使用 , 而且还可 母 A 被保存 , 可通过 n 或
记住和这个组合匹配的字符以供后面的引用 RegExp 的 $1-$9 引用该值
使用
(?:pattern) 只组合 , 不记忆 ai(?:r|R) 等价于 air|aiR
n 和第 n 个分组第一次匹配的字符串相匹配
13. 产 品事业 部
指定匹配的位置
元字符 行为 示例
匹配字符串的开头 , 在多行检索中 , 匹配一
^
行的开头
匹配字符串的结尾 , 在多行检索中 , 匹配一
$
行的结尾
erb 匹配 'never' 中的
b 匹配一个单词的边界
'er', 但不匹配 'verb' 中
B 匹配非单词边界 的 'er'.
(?=p) 匹配 pattern 前面的位置 ^(?=.*d).{4,8}$
(?!p) 匹配后面跟的不是 pattern 的位置
14. 产 品事业 部
标志
字符 含义
i 忽略大小写
g 执行全局匹配 , 即找到所有的匹配 , 而不是在找到第一个匹配后停止
多行模式 ,^ 匹配一行的开头和字符串的开头 ,$ 匹配一行的结尾或字
m
符串的结尾
20. 产 品事业 部
E-mail 地址的合法性验证
问题 描述
使用正则表达式验证 E-mail 地址的合法性
解决方案 1
简单形式 --> ^S+@S+$
它只验证 E-mail 地址中包含了单个 @ 符号,且不包含任何空白
解决方案 2
对字符加限制的简单形式 --> ^[w.-]+@[w.-]+$
解决方案 3
包括所有字符的简单形式 --> ^[w!#$&'*+/=?|.-]+@[w.-]+$
21. 产 品事业 部
对 手机号进 行精确 的合法性验证
问题 描述
使用正则表达式验证正确的手机号 (13800138000)
解决方案 1
简单 形式 --> /^d{11}$/
它只验证 11 位数字
解决方案 2
对前三位数字进行限制 --> /^1[3|5|8]d{9}$/
解决方案 3
获取当前的运营商 --> /^(1[3|5|8]d)d{8}$/
22. 产 品事业 部
验证 日期
问题 描述
使用正则表达式验证日期 (YYYY-MM-DD)
解决方案 1
简单 形式 --> /^d{4}-d{2}-d{2}$/
解决方案 2
较为严谨 的形式 --> /^d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/
解决方案 3
连 接符保持一致 , 且可以是 '-' 或 '/' --> /^(d{4})([-/])(0[1-9]|1[0-2])2(0[1-9]|[1-2][0-9]|3[0-1])
$/