# 正则基础及常用正则
首先,正则是一种搜索模式
- 正则表达式是由一个字符序列形成的搜索模式。
- 当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
- 正则表达式可以是一个简单的字符,或一个更复杂的模式。
- 正则表达式可用于所有文本搜索和文本替换的操作。
正则的语法如下:
/正则表达式主体/ 修饰符(可选)
正则在不同语言中可能略有差异,解析器也在不同环境中不完全相同,经典的表达式结构是 perl正则,基本语法在各语言中相同,特殊的操作可能略有差异。
以js中的正则为例
var rule = /abc/i
以上示例中是匹配字母“abc”,i
修饰符的含义是不区分大小写。
# 修饰符
修饰符 | 说明 |
---|---|
i | 执行对大小写不敏感的匹配 |
g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |
m | 执行多行匹配 |
var rule = /[abc]/i
以上示例中是包含字母“abc”, []
是一种正则“模式”
# 表达式模式
表达式 | 说明 |
---|---|
[abc] | 查找方括号之间的任何字符 |
[^abc] | 查找除方括号字符之外的任何字符 |
[0-9] | 查找任何从 0 至 9 的数字 |
[A-Z] | 表示一个区间,查找所有大写字母 |
[a-z] | 查找所有小写字母 |
(x | y) | 查找任何以 | 分隔的选项 |
\w | 查找字母、数字、下划线。等价于 [A-Za-z0-9_]或[a-zA-Z0-9_] |
# 元字符
元字符是拥有特殊含义的替代字符
表达式 | 说明 |
---|---|
\d | 查找数字 |
\s | 查找空白字符,空格或tab |
\b | 匹配单词边界 |
\uxxxx | xxxx表示四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号©。 |
# 量词
表达式 | 说明 |
---|---|
n+ | 匹配任何包含至少一个n的字符串,等价于{1,} |
n* | 匹配任何包含0个或多个n的字符串,等价于{0,} |
n? | 匹配任何包含0个或1个n的字符串,等价于{0,1} |
{n} | 匹配n次,例如,'o{2}' 不能匹配 "Bob" 中的 'o',但能匹配 "food"中的所有 o |
{n,} | 至少匹配n次 |
{n,m} | 最少匹配n次,最多匹配m次 |
# 位置
表达式 | 说明 |
---|---|
^ | 以此开头 |
$ | 以此结尾 |
# 使用RegExp对象
js中我们使用正则的方式是利用RegExp对象
常规声明方式如下
// 可以搜索不区分大小写的字母a
var ruleA = new RegExp(/a/i);
推荐的快速声明方式如下
var ruleA = /a/i;
将字符串转为正则
// 完整正则
var rule = '/a/i'
var ruleRegExp = eval(rule);
// 正则条件
var str = '^[\w\u4e00-\u9fa5]{6,8}$';
var strRegExp = new RegExp(str);
两种方式功能相同,但 eval
非常耗时,不推荐使用。
# 常用正则
// 手机号码 第一位是1,第二位是3、4、5、6、7、8、9的11位数
var tel = /^1[3|4|5|6|7|8|9]\d{9}$/;
// 用户密码 英文大小写及数字 6-30位
var password = /^[a-zA-Z0-9]{6,30}$/;
// 邮箱
var email = /[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}/;
// 用户名 纯中文
var userName = /^[\w\u4e00-\u9fa5]{6,8}$/;
# 练习
[^a-z] //除了小写字母以外的所有字符
[^\\\/\^] //除了(\)(/)(^)之外的所有字符
[0-9\.\-] //匹配所有的数字,句号和减号
/^Chapter|Section [1-9][0-9]{0,1}$/ //如果输入字符串是 Chapter22 只能匹配Chapter
/^(Chapter|Section) [1-9][0-9]{0,1}$/ //可以匹配到 Chapter22 和 Section22
/\d{2}-[a-z]{5}/ //验证由两位数字、一个连字符再加 5 位小写字母组成的 ID 号。
遍历对象 →