logo头像

桃李不言,下自成蹊

正则表达式的学习与总结

正则表达式的基本概念
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/**
* 正则表达式:也叫规则表达式,按照一定的规则组成的一个表达式,主要用来匹配字符串的
* 在大多数编程语言中都可以使用
* 最早是用在神经学中的
* 组成:是由元字符或者限定字符组成的一个式子
*
*
*
* 元字符
* . 除了\n以外的任意一个字符
* [] 里边可以放什么东西就代表什么东西,一般多表示范围
* [0] 表示数字0
* [360] 表示3或者6或者0
* [0-9] 表示0到9之间任何一个数字 [100-200]错误的写法
* [0-9]{10} 表示0到9之间任何一个数字出现了10次
* [1][0-9][0-9] 表示100到199之间的任意一个数字
* [a-z] 表示26个小写字母
* [a-zA-Z] 表示大小写字母中的其中一个
* [0-9a-zA-Z] 表示所有的数字或者字母中的一个
* [0-9]|[a-z] 表示要么是数字,要么是一个小写的字母
* | 表示或的意思,优先级最低,最后才计算
* () 分组 [0-9]|([a-z])|[A-Z]改变优先级
* ([0-9])([1-5])([a-z]) 三组,从最左边开始计算
* {n} 表示的该限定符前面的表达式出现了n次
* [a-z]{3} 表示a-z之间的字母出现了三次
* [a-z0-9]{1,6} 最少出现1次最多出现6次
* * 表示前面的表达式出现0次或者多次 [a-z][0-9]* 表示小写字母中的任意一个,后面要么没数字,要么是多个数字的
* + 表示前面的表达式出现1次或者多次 {1,}
* ? 表示前面的表达式出现0次或者1次 另一个含义:阻止贪婪模式
* \d 数字中的任意一个
* \D 非数字
* \s 空白符中的一个
* \S 非空白符
* \w 表示非特殊符号 下划线_也是非特殊字符
* \W 表示特殊符号
* \b 单词边界
* g 表示全局匹配
* i 忽略大小写
*
*
* 限定符:表示前面的表达式出现的次数
* {} 更加明确前面的表达式出现的次数
* {0,} 表示的是前面的表达式出现了0次到多次,和 * 一样的
* {1,} 表示的是前面的表达式出现了1次到多次,和 + 一样的
* {0,1} 表示的是前面的表达式出现了0次到1次, 和 ?一样的
* {4} 表示前面的表达式出现4次
* {,10} =====错误的
*
* ^ 表示以什么开始,或者取非(取反)
* ^[0-9] 以数字开头
* ^[a-z] 以小写字母开头
* [^0-9] 取反,非数字
* [^a-z] 非小写字母
* $ 表示以什么结束,可配合^使用
* ^[0-9][a-z]$ 相当于严格模式
*
*
*
* */
正则表达式的简单使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
 /**
* 常见案例如下:
* 15位或者18位身份证号码 ([1-9][0-9]{14})|([1-9][0-9]{16}[0-9xX])
* 15位号码: [1-9][0-9]{14}
* 18位号码: [1-9][0-9]{16}[0-9xX]
* 简写: ([1-9][0-9]{14})([0-9]{2}[0-9xX])?
*
*
*
* 座机号码的正则表达式
* 规律: 010-19876542
* 规律: 0412-19822393
* 匹配规则: [0-9]{3,4}[-][0-9]{8} 或者\d{3,4}[-]\d{8}
*
*
* qq号码
* 规律: 5-11数字
* 匹配规则: [1-9][0-9]{4,11}
*
*
* 手机号
* 规律: 11位数字
* 规律: 130 131 132 134 135 136 137 138 139
* 规律: 143 147
* 规律: 150到159
* 规律: 170 171 173 176 177
* 规律: 180到189
* 匹配规则: ([1][358][0-9][0-9]{8})|([1][4][37][0-9]{8})|([1][7][01367][0-9]{8})
^ 手机号/座机号: /^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[01367])|(18[0,5-9]))\d{8}$|^0\d{2,3}-?\d{7,8}$/
* 简写: \d{11}
* 注释:如果有新的号码规律,完善规则即可
*
*
* 邮箱正则表达式
* 规律: 数字、字母、下划线、中划线、点、 sd12323QWE-._12@126.com 等等
* 匹配规则: ^[0-9a-zA-Z_.-]+[@][0-9a-zA-Z_.-]+([.][a-zA-Z]+){1,2}&
*
*中文正则表达式
* 匹配规则:[\u4e00-\u9fa5]
* escape 将中文编码
* unescape 把编码转成中文
*



//判断密码级别
function getLvl(pwd) {
var level = 0;
//验证密码中是否有数字
if(/\d/.test(pwd)){
level++;
}
//验证密码中是否有字母
if(/[a-zA-Z]/.test(pwd)){
level++;
}
//验证密码中是否有特殊符号
if(/[^0-9a-zA-Z_]/.test(pwd)){
level++;
}
return level; // 1 或者 3
}



//匹配全部的数字
var str = "中国移动:10086,中国联通:10010,中国电信:10000";
var array = str.match(/\d{5}/g);
console.log(array);

var reg = /\d{5}/g;
var arr = reg.exec(str);
while (arr != null){
console.log(arr[0]);
arr = reg.exec(str);
}



//提取日
var str = "2016-06-29";
var arr = str.match(/(\d{4})[-](\d{2})[-](\d{2})/g);
//正则表达式对象.$3, 提取组
console.log(RegExp.$3)



//提取邮箱中的信息
var str = 'noonezxzy@126.com.cn';
var arr = str.match(/([0-9a-zA-Z_.-]+)[@]([0-9a-zA-Z_-]+)(([.][a-zA-z]+){1,2})/);
console.log(RegExp.$1);
console.log(RegExp.$2);
console.log(RegExp.$3);


//文字替换
var str = '今天真是美好的一天,遇到美好的事情,遇见美好的人儿!';
str = str.replace(/美好/g,'糟糕');
console.log(str);



//字符串剔除空格
var str = ' 天真好, 出去打球啊 ';
console.log(str);
str = str.trim(''); //只能去掉两端的空白符
console.log(str);
//使用正则剔除空格
var str = ' 天真好, 出去打球啊 ';
str = str.replace(/\s+/g,''); //\s空白符
console.log(str)



//字母替换
var str = 'aAbaAbaAbACa';
str = str.replace(/[a]/gi,'S');
console.log(str)



* */
支付宝打赏 微信打赏

您的支持是对作者最大的肯定