正则表达式的创建可以用构造函数方式,也可以用字面量方式
reg是regular的缩写,RegExp是RegularExpression的缩写
var reg = new RegExp();
括号内有两个参数,第一个是正则的内容,第二个是匹配模式
比如查找字符a
var reg = new RegExp("a",i)
i是ignore忽略大小写的匹配模式
g是global全局模式
var reg = /a/i
此种书写方式表达的意思相同
如果要查找a或b,或,通过|表示
var reg = /a|b/i
var str = "acefg"
正则表达式的测试方式为test()方法
var result = reg.test(str);
console.log(result);
浏览器的输出结果为true
如果需要检查字符串中是否有字母,可以使用/[a-z]/i的方式,忽略大小写,如果不想用i,可以使用/[A-z]/
如果需要检查字符串中是否有adc,aec,afc,可以定义正则表达式/a[def]c/
如果需要包含查找除了什么以外的内容,可以使用/[^ab]/
var reg = /[^ab]/
str = "abc"
var result = reg.test(str);
console.log(result);
浏览器的返回结果为true,因为字符串中包含除了ab以外的c
正则表达式的应用:
利用正则表达式拆分字符
var str = "1a2b3c4d5e";
var result = str.split(/[A-z]/);
console.log(result);
浏览器的输出结果为1,2,3,4,5
利用正则表达式搜索字符
var str = "hello abc hello aec afc";
var result = str.search(/a[A-z]c/);
console.log(result);
浏览器的输出结果为6,search()方法可以适配正则表达式,和indexOf()的使用方法类似,如果找到,返回索引位置,如果没找到,返回-1
利用正则表达式匹配字符
var str = "1a2e3c4f";
var result = str.match(/[a-z]/);
console.log(result);
但是系统只是匹配到a,之后就不再匹配了,如果需要全局匹配,可以定义匹配模式为g,如果希望忽略大小写,可以在g之后加入i
var result = str.match(/[a-z]/gi);
console.log(result);
浏览器输出的结果为a,e,c,f
利用正则表达式替换指定的字符
var str = "adadA";
var result = str.replace(/a/gi,"o( ̄▽ ̄)ブ");
console.log(result);
浏览器的输出结果为o( ̄▽ ̄)ブdo( ̄▽ ̄)ブdo( ̄▽ ̄)ブ
利用正则表达式确认字符串中是否包含重复的字符
var str = "aaab";
var reg = /a{3}/;
result = reg.test(str);
console.log(result);
浏览器的输出结果为true,其中{}包含的数字表示前面的字符连续几次出现,比如a{3},表示aaa,ab{3},表示abbb,(ab){3},表示ababab,ab{1,3},表示ab,abb,abbb都可以,{1,3}表示出现1次到3次,{1,}表示出现1次以上,也可以用+代替,比如ab+,表示a至少1个b,
利用正则表达式确认是否有a开头的字符串
var str = "bca";
var reg = /^a/;
console.log(reg.test(str));
浏览器的输出结果为false,^表示以某字符开头
var reg = /a$/;
console.log(reg.test(str));
浏览器的输出结果为true,$表示以某字符结尾
利用正则表达式核实手机号是否合规
var str = "138123456789";
var reg = /^1[3-9][0-9]{9}$/
console.log(reg.test(str));
浏览器的返回结果为true,其中正则表达式的部分分为三部分看,^1,表示需要以1开头,并且只需要1位即可,无需写{1};[3-9]表示,第二位需要为3-9之间的数字;[0-9]{9}$表示从第三位开始,要求是数字,且为9位,并以数字结尾
正则表达式中\w表示,任意的数字,字母,,相当于[A-z0-9]
正则表达式中\W表示,除了数字,字母,,相当于[^A-z0-9]
正则表达式中\d表示,任意数字,相当于[0-9]
正则表达式中\D表示,除了数字,相当于[^0-9]
正则表达式中\s表示,空格
正则表达式中\S表示,除了空格
正则表达式中\b表示,单词边界
var str = "hello children";
var reg = /child/;
console.log(reg.test(str));
浏览器的返回结果为true,但是并未达到我们的测试要求,我们要的是是否包含child这个单词,所以需要用到单词边界
var reg = /\bchild\b/;
console.log(reg.test(str));
浏览器的返回结果为false,字符串中并未包含child这个单词
利用正则表达式去除用户名输入框中的空格
var str = " ad min ";
如果只想去掉用户名左侧的后右侧的空格,中间的空格不去掉
str = str.replace(/^/s*|/s*$/g,"");
console.log(str);
浏览器的输出结果为"ad min",原理为,将用户名左侧的空格去掉,利用^和/s去掉以空格开头的字符,但是如果仅是这样,浏览器只会去掉一个,需要加一个*表示0个以上的对应字符;针对去掉右侧的空格,原理类似,只不过加一个$,引导浏览器删掉以0个以上的空格结尾的字符,两个正则中间加入|,表示或,但是如果仅是这样,浏览器认为已经删掉左侧空格,右侧的空格不删除也可以,所以需要加入全局g,全部的匹配规则的空格均需删除
利用正则表达式判断邮件格式是否合规
var str = "abc.hello@163.com"
确定正则表达式之前先对字符串进行分拆成几个部分进行分析,确定正则语句,
邮件格式可以分拆为:abc .hello @163 .com .cn
针对第一部分abc 可以是字母,数字,下划线,用\w即可,但是邮件字符最少3个字符以上,可以加入量词设定,\w{3,}
针对第二部分.hello 可以是字母,数字,下划线,但是要以.开头,可以这样写 .\w,但是因为这部分不是必须有的,可有可无,可以加入*,0个以上,有没有都可以 (.\w)*
针对第三部分@163 可以是数字,字母,但不会是下划线,要求以@开头,可能是2-5位,要求至少出现1次,可以这样写 @[A-z0-9]{2,5}+
针对第四部分.com和第五部分.cn 可以是字母,要求以.开头,因为.cn和.com要求类似,可以设为是.com规则的复用,可能出现一次或者不出现,可能是2-5位,可以这样写(.[A-z]{2,5}){1,2}
最后记得将开头和结尾锁定,避免合规字符出现在不合规字符串中间却判断通过的情况,在第一部分之前加入^,在最后部分之后加入$
var emailReg = /^\w{3,}(.\w)*@[A-z0-9]{2,5}+(.[A-z]{2,5}){1,2}$/
console.log(emailReg(str));
浏览器的输出结果为true