p1:推荐学习正则表达式的网站——MDN JS正则表达式
p2:本文绝大多数示例代码来自于“2018年开课吧的某一期前端培训笔记”,感谢老师~
一、字符类别
1. . (点字符):匹配一个除了回车符和换行符 (\r \n) 以外的任意字符
var reg=/./;
reg.test("a"); // 存在非换行符和回车符的字符 a,结果为 true
reg.test("."); // 存在非换行符和回车符的字符 .,结果为 true
reg.test("\r"); // 该字符是一个回车符,结果为 false
reg.test("1\r"); // 存在非换行符和回车符的字符 1,结果为 true
reg.test("\r\n"); // 两个字符分别是回车符和换行符,结果为 false
2. \d:匹配一个数字
3. \D:与 \d 相反,匹配一个非数字的字符
4. \w:匹配一个字母、一个数字或一个下划线
5. \W:与 \w 相反,匹配一个除字母、数字、下划线以外的字符,如短横线、点、$符等
6. \s:匹配一个空白字符(例如:\r \n \t 空格)
7. \S:匹配一个非空白字符(例如:数字、字母、各类非空白的符号)
8. \:转义字符,用于转义特殊的符号,如:/, .
字符 | 含义 |
---|---|
. | 匹配一个除了回车符和换行符 (\r \n) 以外的任意字符 |
\d | 匹配一个数字 |
\D | 与 \d 相反,匹配一个非数字的字符 |
\w | 匹配一个字母、一个数字或一个下划线 |
\W | 与 \w 相反,匹配一个除字母、数字、下划线以外的字符,如短横线、点、$符等 |
\s | 匹配一个空白字符(例如:\r \n \t 空格) |
\S | 匹配一个非空白字符(例如:数字、字母、各类非空白的符号) |
\ | 转义字符,用于转义特殊的符号,如:/, . |
二、字符集合
1. [ ]:匹配一个字符集合,也叫字符组。匹配集合中的任意一个字符。你可以使用连字符'-'指定一个范围。
// 匹配一个字符,这个字符必须是:1/a/2/b/3其中一个
// 如果是就表示满足,如果不是就不满足
var reg=/[1a2b3]/;
reg.test("a"); // 结果:true
reg.test("3"); // 结果:true
reg.test("fg5678"); // 一个符合要求的字符都不存在,结果为:false
reg.test("a999999"); // 包含字母 a,结果为:true
2. [^ ]:匹配一个反义或补充字符集,也叫反义字符组。它匹配任意一个不在括号内的字符。你也可以通过使用连字符 '-' 来指定一个范围内的字符。
// 匹配一个字符,但是这个字符既不是1 并且 不是2 并且 不是3
var reg=/[^123]/;
reg.test("a"); // true
reg.test("3"); // false
reg.test("123"); // 没有1,2,3以外的字符,结果为:false
reg.test("a123"); // 存在一个符合条件的字母 a,所以结果为:true
三、边界
1. `^` 表示字符串最左边,常用于匹配字符串的开头
2. `$` 表示字符串最右边,常用于匹配字符串的结尾
var reg=/^abc/; // 匹配以 abc 开头的字符串
reg.test("123abc123"); // 不以 abc 开头,结果为 false
reg.test("abc123"); // 以 abc 开头,结果为 true
var reg=/abc$/; // 匹配以 abc 结尾的字符串
reg.test("123abc"); // 以 abc 结尾,结果为 true
reg.test("abc123"); // 不以 abc 结尾,结果为 false
reg.test("123bc"); // 仅以 bc 结尾,不是以完整的 abc 结尾,结果为 false
四、量词
1. *:表示出现0次或多次,不常用
2. +:表示出现 1 次或多次(至少一次)
var reg=/1\d+/;
reg.test("1"); // 字符 1 后面没有字符了,结果为 false
reg.test("123"); // 字符 1 后面还有字符 2 和 3,结果为 true
3. ?:表示出现 0 次或一次
4. {n}:n 为任意自然数,表示出现 n 次
5. {n,}:n 为任意自然数,表示至少出现 n 次
6. {m,n}:m 和 n 为任意自然数,表示出现 m~n 次
7. |:表示或者,只要满足两个匹配规则中的一个即可
var reg=/abc|123/; // 表示匹配 abc 或者 123
reg.test("abc456"); // 包含字符串 abc,结果为 true
reg.test("def789"); // 既不包含字符串 abc,也不包含 123,结果为 false
8. ():表示分组
// 匹配电话号码
var reg=/(\d{3,4})-(\d{7,8})/;
var arr="021-33335555".match(/(\d{3,4})-(\d{7,8})/)
arr[0] // 全部
arr[1] // 第一组:区号:021
arr[2] // 第二组:号码:333355555
量词 | 含义 |
---|---|
* | 表示出现0次或多次,不常用 |
+ | 表示出现 1 次或多次(至少一次) |
? | 表示出现 0 次或一次 |
{n} | n 为任意自然数,表示出现 n 次 |
{n,} | n 为任意自然数,表示至少出现 n 次 |
{m,n} | m 和 n 为任意自然数,表示出现 m~n 次 |
exp1|exp2 | 表示或者,只要满足两个匹配规则中的一个即可 |
() | 表示分组 |