[js]正则篇
一、正则基本概念
1、一种规则、模式、文本处理工具
2、强大的字符串匹配工具
3、在js中常与字符串函数配合使用
二、js正则写法
正则在js中以正则对象存在;
(1)var re=new RegExp(正则表达式);
(2)var re=/正则表达式/;
三、正则的基本写法
1、开始结束符 ^ $
2、元字符
(1)任意字符 [abc] abc中的任意一个
(2)范围 [a-z] 字母a到c; [1-9] 数组1到9
(3)排除 [^a-z] 排除字母a-c
(4)任意字符 .
3、量词
(1) {n} 出现n次
(2) {n,m} 最少n次,最多m次
(3) + 任意次 >0次
(4) ? 最少0次 最多1次
(5) * 可有可无
4、转译字符
\d 数字 \D 非数字
\w 数字、字母、下滑线 \W 非数字 字母 下划线
\s 空白字符 \S 非空字符
\b
是单词边界 \B非单词边界 (用于位置匹配,\W和\w间的位置)
5、其他字符
i 忽略大小写 例 re=/a/i A或者a
g 全局搜索 例 re=/\d/g 全部数字
m 多行查找 例 re =/\d/m
四、字符串使用函数
1. str.search(re) //搜索匹配字符,返回位置,如果找不到,返回-1。
2. str.math(re) //搜索字符串,返回匹配字符数组
3. str.replace(re,'替换字符') //搜索字符串,替换匹配字符
五、正则对象方法
4. re.test(str) //测试字符串是否满足正则,返回布尔值
5. re.exec(str) //类似字符串方法match
六、正则的使用
1、示例:
----------------------------------------------------------
示例 测试邮箱格式
邮箱格式: 用户名 @ 邮箱名 . com/cn
字符类型: 字符 数字 下划线 @ 字母 数字 . 字母
正则字符: \w @ [a-z 0-9] [a-z]
量词: + 1 + +
re=/^\w+@[a-z 0-9]+\.[a-z]+$/g
-----------------------------------------------------------
2、贪婪特性:
获取所有html标签
re=/^<.+>/g; 会匹配第一个《 到最后一个> 中间内容全部当做.处理
改进:
re=/^<[^<]+>/$/g;
re=/^<.*?>/$/g;
3、惰性匹配
通过在量词后面加个问号就能实现惰性匹配
如:var regex = /\d{2,5}/g; 改为 var regex = /\d{2,5}?/g;
4、位置配置
(1)正向先行断言 (?=p)
,正向先行断言
会查看并确保搜索匹配模式中的元素存在,但实际上并不匹配。正向先行断言的用法是(?=...)
,其中...
就是需要存在但不会被匹配的部分
(2)负向先行断言 (?!p) ,正向先行断言
会查看并确保搜索匹配模式中的元素存在,但实际上并不匹配。正向先行断言的用法是(?=...)
,其中...
就是需要存在但不会被匹配的部分
let quit = "qu"; let noquit = "qt"; let quRegex= /q(?=u)/; let qRegex = /q(?!u)/; quit.match(quRegex); // Returns ["q"] noquit.match(qRegex); // Returns ["q"]
5、捕获组
捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用
例如: /(a)(b)(c)/
中的捕获组编号为
- 组
0
:abc
- 组
1
:a
- 组
2
:b
- 组
3
:c
其中,组0
是正则表达式整体匹配结果,组1
`2`3
才是子表达式匹配结果,使用match方法匹配放回数组;
- 子表达式捕获组编号从
1
开始,顺序从左到右(例如编号1
是左侧第一个()
包裹的子表达式的结果) - 可以在正则表达式中对前面捕获的内容进行引用(反向引用)
- 也可以在程序中,对捕获组捕获的内容进行引用(比如
replace
中)
var str = "2017-07-29"; var reg = /(\d{4})-(\d{2})-(\d{2})/; // 非全局模式有捕获组结果 str.match(reg); // ["2017-07-29", "2017", "07", "29", index: 0, input: "2017-07-29"]
6、非捕获组 (?:p)
六、常用正则表达式
1、中文校验
^[\\u4e00-\\u9fa5]{
0
,}$
2、密码强度
^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{
8
,
10
}$
3、数字字母下划线组成的字符串
^\\w+$
4、身份证
15位:^[
1
-
9
]\\d{
7
}((
0
\\d)|(
1
[
0
-
2
]))(([
0
|
1
|
2
]\\d)|
3
[
0
-
1
])\\d{
3
}$
18位:^[
1
-
9
]\\d{
5
}[
1
-
9
]\\d{
3
}((
0
\\d)|(
1
[
0
-
2
]))(([
0
|
1
|
2
]\\d)|
3
[
0
-
1
])\\d{
3
}([
0
-
9
]|X)$
5、日期yyyy-mm-dd
^(?:(?!
0000
)[
0
-
9
]{
4
}-(?:(?:
0
[
1
-
9
]|
1
[
0
-
2
])-(?:
0
[
1
-
9
]|
1
[
0
-
9
]|
2
[
0
-
8
])|(?:
0
[
13
-
9
]|
1
[
0
-
2
])-(?:
29
|
30
)| (?:
0
[
13578
]|
1
[
02
])-
31
)|(?:[
0
-
9
]{
2
}(?:
0
[
48
]|[
2468
][
048
]|[
13579
][
26
])|(?:
0
[
48
]|[
2468
][
048
]|[
13579
][
26
])
00
)-
02
-
29
)$