正则
正则就是一种规则,用来处理
字符串
1.判断一个字符串是否符合制定规则 test 匹配
2.把字符串中符合正则的内容捕获到 exec 捕获
1 、创建正则的方式
1.字面量方式
var reg = /\d/;
2.实例创建
var reg = new RegExp("\d");
这两种创建方式的区别的
console.dir(RegExp.prototype);
var reg = /\d/; //包含一个0-9的数字
reg.test(str)
2 、元字符
每一个正则表达式都是由元字符和修饰符组成的
元字符:在两个斜杠之间有意义的字符就是元字符
修饰符:全局匹配g,不区分大小写i,行首行尾m
3、 特殊意义字符
\ :转义字符,转义后边字符所代表的含义
^ :以某个元字符开始
$ :以某个元字符结尾
^和$并不占位,当同时出现时就表示一个字符
\n:匹配一个换行符
. :除了\n以外的任意字符
var reg = /^0.2$/;
//以0开头,以2结尾,中间为除了\n的任意字符
若想只表示0.2则需要对元字符进行转义
var reg = /^0\.2$/;
():分组,把一个大正则划分为几个小正则
[xyz]:x,y,z中的一个
[^xyz]:除了xyz以外的任意字符
x|y:x或y中的一个
[a-z]:包含a-z之间的任何一个字符
[^a-z]:除了a-z之间的任何一个字符
\d:0-9之间的数字
\D:除了0-9之间的数字,以外的任意字符
\b:一个边界符
\w:数字、字母、下划线中的任意字符 等价于[0-9a-zA-Z_]
\s:匹配一个空白字符 如:空格,制表符(tab键),换页符
4 、出现次数的量词元字符
“*” :出现0到多次
“+” :出现1到多次
“?” :出现0或1次
{n}:出现n次
{n,}:出现n到多次
{n,m}:出现n到m次
5 、简单的手机号验证
有效数字验证:
[]中出现的所有字符都是代表本身意义的字符,没有特殊含义
[]中不识别两位数
()分组的作用:能改变x|y的默认优先级
var reg = /^18|19$/;
var reg2 = /^(18|19)$/;
6 、字面量创建和实例创建的区别
字面量方式中斜杠之间包含的所有内容都是元字符,不能进行变量拼接
var name = "abc";
var reg = /^\d+"+name+"\d+$/;
console.log(reg.test('2015"""nameee"2016'));
实例创建方式中包含的就是字符串
var name = "abc";
var reg = new RegExp("^\\d+"+name+"\\d+$");
console.log(reg.test("2015abc2016"));
//在字符串中需要对\进行转义
7 、正则实例
1.或者2-6或者8
var reg = /^[12-68]$/;
2.数字字母下划线和-
var reg = /^[\w-]$/;
3.匹配年龄18-65之间 分为18-19,20-59,60-65
var reg = /^(1[8-9]|[2-5]\d|6[0-5])$/;
4.匹配中国汉字姓名
var reg = /^[\u4e00-\u9fa5]{2,4}$/;
8 、正则的捕获exec
捕获的内容是一个数组[当前正则捕获到的内容为:index,捕获内容在字符串中起始索引;捕获的原始字符串]
若没有匹配到内容,则直接返回null
每一次捕获时都先进行默认匹配,如果没有匹配成功则返回null;只有有匹配的内容才能捕获到
var reg = /\d+/;
var str = "abcde2015fghijk2016";
var res = reg.exec(str);
console.log(res);