正则表达式属于字符串范畴,由两部分组成:原义字符、元字符。
1、原义字符:书写在正则表达式中表示为字面意思的字符。
2、元字符:书写在正则表达式中表示为特定含义的字符。
基本元字符、范围元字符、重复元字符、转义字符、贪婪匹配符、后向引用。
1、**.匹配任意字符
2、*匹配前一个字符出现的次数为0次或多次
3、?**匹配前一个字符出现的次数为0次或1次
4、+匹配亲一个字符出现的次数为1次或多次
5、^匹配以后面的字符开头
6、$匹配以前面的字符结尾
7、| 匹配|两端出现的字符中的任意一个,表示“或”的意思
1、利用字面量创建正则表达式:
var reg=/abc/;
2、利用构造函数创建正则表达式:
var reg=new RegExp(“abc”);
3、创建正则表达式时可以为正则表达式添加修饰符:
(1)g,表示全局匹配。
(2)i,表示忽略大小写。
例如:利用字面量创建正则表达式。
var reg=/a./gi;
var str=‘abcdaefgawdA9fa3eweaa’;
例如:利用构造函数创建正则表达式。
var reg=new RegExp(“a.”,“gi”);
var str=‘abcdaefgawdA9fa3eweaa’;
4、创建带有转义字符的正则表达式:
1、match(reg)
功能:返回字符串匹配正则表达式reg的子串内容。
该功能返回的是一个长的像数组的对象(只匹配第一个子串)或数组(全局匹配)。
例如:match()返回下列格式。
[“ab”, index: 0, input: “abcdaefgawdA9fa3eweaa”, groups: undefined]
索引值为0的元素是匹配正则表达式的唯一结果,
index:返回匹配正则表达式的子串的索引值。
input:返回源字符串
groups:返回正则表达式的分组结果
结论:凡是利用match()返回的匹配结果都要带下标。
若字符串没有匹配reg的子串,则返回null。
2、search(reg):
功能:返回字符串匹配正则表达式reg的子串位置。
该功能返回的是一个索引值。
若字符串没有匹配reg 的子串,则返回-1。
3、replace():
例1:匹配全部都是由原义字符组成的正则表达式。
var reg=/abc/;
var str=‘今天我学习了abc’;
var a=str.match(reg);
var b=str.search(reg);
console.log(a,b);
例2:第一个元字符(.)。
var reg=/a./;
var str=‘abcdefg’;
var a=str.match(reg);
var b=str.search(reg);
console.log(a,b);
例3:第二个元字符(* ? +)
var str=‘banana’;
var reg1=/an+/; //以a开头,字符n出现了1次或多次的子串
var reg2=/(an)+/; //字符an出现了1次或多次的子串
var a=str.match(reg1); //an
var b=str.match(reg2); //anan
console.log(a,b);
例如:var s=“bannnnann”
var c=str.match(/an*/); //以a开头,字符n出现了0次或多次的子串:annnn
var d=str.match(/an?/); //以a开头,字符n出现了0次或1次的子串:an
例4:第七个元字符(|)
var str=“I like football.”;
var reg=/football|basketball/;
var a=str.match(reg); //[“football”,index:7,input:“I like football”,groups:undefined]
1、[abc]表示匹配字符a或字符b或字符c。
2、[^abc]表示匹配除了字符a和字符b和字符c的字符。
3、[a-z]表示匹配所有的小写字母。
4、[A-Z]表示匹配所有的大写字母。
5、[0-9]表示匹配所有的数字。
6、[b-d]表示匹配小写字母b到d。
注意:这种正则表达式在书写时必须按照从小到大的顺序书写,例如[z-a]是非法的。
1、{m}限制前一个字符可以重复出现m次。
2、{m,}限制前一个字符可以重复出现至少m次。
3、{m,n}限制前一个字符可以出现m到n次。
例5:书写一个用来匹配邮政编码的正则表达式。
石家庄的邮政编码050000。邮政编码的特点:6位数字。
正则表达式:/[0-9]{6}/
例6:书写一个用来匹配带有区号的固定电话的正则表达式。
例如:0311-85047726。
固定电话的特写:区号三位或四位,区号必须以0开头,电话号码七位或八位。
正则表达式:/0[0-9]{2,3}-[0-9]{7,8}/
例7:制作一个表单,表单中有一个要求输入固定电话的文本框,如何利用正则表达式进行表单验证。
var btnNode=document.querySelector(".btn");
btnNode.addEventListener("click",function(){
event.preventDefault();
var phone=document.getElementsByName("phone")[0];
var reg=/^0[0-9]{2,3}-[0-9]{7,8}$/;
// if(phone.value.match(reg)===null){
// if(phone.value.search(reg)===-1){
if(!reg.test(phone.value)){
alert("您输入的固定电话不符合规格");
}else{
document.forms[0].submit();
}
})
总结:关于判断字符串是否具备匹配正则表达式的子串,可有有三种方法。
字符串.match(正则表达式)===null //成立,不匹配;不成立,匹配;
字符串search(正则表达式)===-1 //成立,不匹配;不成立,匹配;
正则表达式**.test**(字符串)===false //成立,不匹配;不成立,匹配;
1、1个元字符只能匹配1个字符,或对1个字符进行限制。
2、例8:设一所培训学校的专业讲师编号为八位字符,是按照下列规律进行编排的;
讲师必须以大写字母T开头,接下来的两位表示讲师的入职年份,取值范围规定为10-30,例如某讲师是2017年入职,则这两位应该取值为17。 接下来的两位为主讲课程的编号,规定该培训学校共有15门课程需要讲解,即这两位取值范围为01-15。接下来的两位为讲师顺序号,取值范围为01-99,按照讲师入职的先后顺序排列。最后一位是讲师的学历编号,专科学历为“Z”,本科学历为“B”,研究生学历为“Y”,其他学历不予考虑。
/^T([12][0-9]|30)(0[1-9]|1[0-5])(0[1-9]|[1-9][0-9])(Z|B|Y)$/