正则表达式

**

JavaScript 正则表达式*

正则表达式属于字符串范畴,由两部分组成:原义字符、元字符
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():

功能:将字符串中匹配正则表达式的子串替换为指定的内容。
格式:字符串.replace(reg,content)
      字符串.replace(reg,function(){})
1)var str=“abcdefg”,reg=/c\w/;
     var result=str.replace(reg,123);
     console.log(result);    //ab123efg

`

2)允许在指定的内容中使用$1、$2、$3、……。
     分组:在正则表达式中利用()扩住的部分就是一个分组。
     $1表示字符串中匹配第一个分组的子串内容。
     $2表示字符串中匹配第二个分组的子串内容。
   

	 var str=“abcdefg”,reg=/c(\w\w)\w/;
	 var result1=str.replace(reg,"1");
	console.log(result1);       //ab1g
	var result2=str.replace(reg,"1$1");
	console.log(result2);       //ab1deg
	var result3=str.replace(reg,"1$2");
	console.log(result3);       //ab1$2g
3)字符串.replace(reg,function(result,sub){
         //result - 字符串中匹配reg的最终结果
         //sub - 每一个全局匹配中分组的部分
         //回调函数什么时候执行:每一个分组执行一次,若没有分组则只执行一次。
         //return 将什么内容用来替换字符串中匹配reg的子串
})
    例:将一个CSS属性名改为驼峰式命名。
         list-style-type  驼峰式命名:listStyleType
         margin-bottom  驼峰式命名:marginBottom
         btn.onclick=function(){
	  var cssName=document.getElementsByName("cssName")[0].value;
	  var reg=/-([a-z])/g;
	  var result=cssName.replace(reg,function(result,sub){
		 return sub.toUpperCase();
	  })
	  alert(result);
}
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     //成立,不匹配;不成立,匹配

六、正则表达式是单字符匹配:

11个元字符只能匹配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)$/

3、例9:

1)身份证号:
     前六位:130105  6位数字
     出生年份:41900-2099  ((19|20)[0-9]{2})
     出生月份:201-12   (0[1-9]|1[0-2])
     出生日期:201-31   (0[1-9]|1[0-9]|2[0-9]|3[0-1])
                            (0[1-9]|[1-2][0-9]|3[0-1])
                            (0[1-9]|[12][0-9]|3[01])
     最后四位:4位数字或3位数字X(大小写均可)    ([0-9]{4}|[0-9]{3}[Xx])
     /^[0-9]{6}((19|20)[0-9]{2})(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])([0-9]{4}|[0-9]{3}[Xx])$/
	/^\d{6}((19|20)\d{2})(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])(\d{4}|\d{3}[Xx])$/
2)电子邮箱地址:用户名@电子邮箱服务器名   @qq.com   @163.com
     @之前的用户名只能包含特定的字符:字母大小写、数字、_、$、*、#
     用户名不得少于5个字符。
     /^[A-Za-z0-9_$*#]{5,}@[a-z0-9]{2,}\.[a-z]{2,}$/
3)手机号码:       

七、转义字符:

 1、什么是转义字符:转义字符都是以\开头的,后面跟一个或几个字符,整体的含义已经不
是这个字符所表示的本意,而是转换为指定的含义,所以叫做“转义字符”。
 2、第一组:元字符作为原义字符使用时需要转义。
\.   \\   \’   \”   \^   \$   \<   \>   \*   \?   \+
 3、第二组:控制字符转义。
\n   \t   \f   \r   \v
 4、第三组:转义元字符。
\d,表示任意一个数字,等同于[0-9]。
\D,表示任意一个非数字,等同于[^0-9]。
\w,表示任意一个数字或字母或空格。
\W,表示任意一个非数字、字母、空格。
\s,表示任意一个空白符(空格、换行、Tab键)。
\S,表示任意一个非空白符。
\b,表示单词边界(空格、换行、句子开头、标点符号)。
\B,表示非单词边界。
   (1)删除字符串两端的空格:
        原理:利用正则表达式匹配字符串两端的空格并使用空串进行替换。
        var str=“   ab  cd   ”,reg=/^\s+|\s+$/g;
        str.replace(reg,“”);    //ab  cd2)将句子中的每个单词的首字母大写:
        原理:利用正则表达式匹配每一个单词,将每一个单词的首字母设置为大写。
        var str=“he is a teacher,and a boy.,reg=/\b(\w)/g;
        var result=str.replace(reg,function(result,sub){
           return sub.toUpperCase();
		})
		console.log(result);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值