正则表达式(regular expression) 由表达式+修饰符组成
1.声明方式
a.字面量声明 :var reg = /表达式/修饰符;
b.构造函数:var reg = new RegExp("表达式","修饰符") ;
var reg = /day/ig; // /表达式/ 修饰符: i忽略大小写; g全局匹配(不加则匹配一个) var reg = new RegExp("day", "ig"); // ("表达式", "修饰符")
2.拓展方法 test() / exec()
var str = "good good study, day day up"; var reg = /dAy/ig; // test 若包含符合正则表达式的字符串,返回true,否则返回false console.log(reg.test(str));//true // exec 只匹配一次 ,则提取该字符串形成新数组,不包含则返回null console.log(reg.exec(str));// ["day"]
3.字符串使用正则表达式的函数
a.字符串 match()方法,匹配字符串到新数组(默认匹配一个) 没有匹配内容则返回null
var str = "good good study, day day up"; console.log(str.match("day")); // ["day"] console.log(str.match("dAy")); // null // 配合正则 var reg = /dAy/ig; console.log(str.match(reg)); // ["day", "day"]
b.字符串 replace() 方法 替换匹配的字符串(默认替换一个)
var str = "good good study, day day up"; console.log(str.replace("day", "money")); // "good good study, money day up" // 配合正则 var reg = /day/ig; console.log(str.replace(reg, "money")); // "good good study, money money up"
c.字符串 split() 方法 转换数组
var str = "good good study, day day up"; var reg = / /gi; // var arr = str.split(" "); // 按空格展开 var arr = str.split(reg); // 按空格展开 console.log(111, arr);// ["good", "good", "study,", "day", "day", "up"]
4.普通字符(字面量字符 a-z A-Z 0-9)
5.元字符(有特殊意义的字符)
a.限定符 规定正则表达式中 子表达式出现的次数
* 匹配前边的子表达式出现 0 次 或 多次 {0,}
+ 匹配前边的子表达式出现 1 次 或 多次 {1,}
? 匹配前边的子表达式出现 0 次 或 1次 {0,1}
{n} 匹配前边的子表达式 n次
{n,} 匹配前边的子表达式 最少出现n次
{n,m} 匹配前边的子表达式 最少出现n次 最多出现m次
var str = "good good study, ay ay up"; var reg = /d*ay/ig; console.log("1", reg.test(str)); // true var reg = /d+ay/ig; console.log("2", reg.test(str)); // false var reg = /d?ay/ig; console.log("3", reg.test(str)); // true var reg = /d{1}ay/ig; console.log("4", reg.test(str)); // false var reg = /d{1,}ay/ig; console.log("5", reg.test(str)); // false var reg = /d{0,1}ay/ig; console.log("6", reg.test(str)); // true
b.定位符
^ 匹配字符串的开头
$ 匹配字符串的结尾
^ $ 单一使用不能将规则定死 同时定义会将规则定死
var str = "googleg"; var reg = /^g$/ig; console.log("7", reg.test(str)); // false
c.字符匹配符
[xyz] 匹配这个集合中的任一一个字符(与x|y|z一样), 但方括号里可以写范围, 如:[a-z] 表示小写a到小写z范围的字符
[0-9a-zA-Z$_] 可以包含字符"$ _"
[^0-9] 不包含0-9的任意字符
var str = "googleg"; var reg = /^g[a-z]{5}g$/ig; console.log("8", reg.test(str)); // true var reg = /^g[a-z]g$/ig; console.log("9", reg.test(str)); // false var str = "googleg"; var reg = /[^0-9a-zA-Z_$]/; console.log("10", reg.test(str)); // false var str = "google@g"; console.log("11", reg.test(str)); // true
其他匹配字符:
w 匹配一个可以组成单词(变量)的字符(包括字符,数字,下划线) , 如[w]匹配“$5.98”中的5,等价于[a - zA - Z0 -9_]。
W 查找非单词字符。匹配一个不可以组成单词的字符,如[W]匹配"$5.98"中的$,等于[^ a - zA - Z0 -9_]。
d 匹配一个数字字符,/d/ ==> /[0 - 9]/
D 匹配一个非数字字符,/D/ ==> /[^ 0 - 9]/
s 匹配一个空白字符,包括
,
, f, , v等
S 匹配一个非空白字符,等于 / [^
f
v] /
. 匹配除换行符
以外的其他字符
[u4e00-u9fa5] 匹配中文字符
d.选择匹配符 |
e.转义字符
6.常见匹配规则
检查邮政编码//共 6 位数字,第一位不能为 0 /^[1-9]d{5}$/ 检查文件压缩包 //xxx.zipxxx.gzxxx.rar /^w+.(zip|gz|rar)$/ 删除多余空格 // str.replace(/s+/,''); 删除首尾空格 str.replace(/^s+/,''); //去除开头的空格 str.replace(/s+$/,''); // 去除结尾的空格 //删除所有的空格 str.replace(/s/g,''); //删除前后的空格 str.replace((^s+)|(s+$),'') 电子邮件( xxxxx @ xxxx(.xxxx)+) /^w+@w+(.w+)+$/ 如: 770107@qq.com; 770107@qq.com.cn 手机号(1开头任意数字) 1(3|5|7|8|4)d{9} /^1d{10}$/
身份证 /^d{17}(d|X)$/ 422422 19660101 5810 421087 19890101 121X ^[1-9]d{5}[19|20]d{2}d{7}(d|X)$ 日期 (合法日期格式:xxxx-xx-xx或 xxxx/xx/xx或xxxx.xx.xx) /^d{4}[-/.]d{2}[-/.]d{2}$/ 只能输入中文 str.replace(/[^u4e00-u9fa5]/g,''); 账户名只能使用数字字母下划线,且数字不能开头,长度在6-15之间 /^[a-zA-Z_]w{5,14}$/ 验证IP (xxx.)xxx.xxx.xxx| 254.245.255.255 240.196.19.5 /^((25[0-5]|2[0-4]d|1d{2}|[1-9]?d).){3}(25[0-5]|2[0-4]d|1d{2}|[1-9]?d)$/
首位不为0的整数或两位小数 /^(([1-9]d*)(.d{1,2})?|0.([1-9]|d[1-9])|0)$/