js基础-正则专题

一. JavaScript中定义正则的两种方式:
a) 使用正则字面量:
i. var  reg = /表达式/模式修饰符
b) 使用RegExp构造函数:

i. var reg = RegExp(“表达式”,”模式修饰符”)

 //1、使用正则字面量定义,var  reg = /表达式/模式修饰符
        var aArr='abcaabbccaaabbbcc';
        // var reg=/a/g;
        //2、使用RegExp构造函数,var reg = RegExp(“表达式”,”模式修饰符”)
        var reg=new RegExp('abc','g')
        console.log(aArr.match(reg));
二. 支持正则的方法:
a) Match:找到与正则相匹配的字符并且存入数组,返回数组。

    i. 练习:挑选出abcaabbccaaabbbcc中的所有a

b) Replace:用指定字符替换符合正则的字符,返回替换后的字符串。

    i. 练习:使用*代替这段文字中的“这个人好像一个逗逼,那个人好像一个傻逼”的’逼’字。

c) Search:搜索与正则相匹配的字符的开始下标,返回该下标。

    i. 练习:挑选出aabbccddaabbccdd中的cc首次出现的位置

d) Test:判断字符串是否符合正则,返回true或者false。

    i. 练习:判断abcdefg中是否含有def

e) Split:用符合正则的字符将字符串切割并存入数组,返回数组。

    i. 练习:用逗号将字符串abc,aabbccdd,aaabbbcccddd切割成数组

 //全局匹配g
        
        var sStr='abcaabbccaaabbbcc';
        var reg=/a/g;
        //1、Match:找到与正则相匹配的字符并且存入数组,返回数组
        console.log(sStr.match(reg));//输出Array(6)
        //2、Replace:用指定字符替换符合正则的字符,返回替换后的字符串
        //违反字的过滤
        var sStr1='这个人好像一个逗逼,那个人好像一个傻逼';
        console.log(sStr1.replace(/逼/g,'*'));
        //3、Search:搜索与正则相匹配的字符的开始下标,返回该下标
        var sStr2='aabbccddaabbccdd';
        var reg1=/cc/g;
        console.log(sStr2.search(reg1));
        //4.Test:判断字符串是否符合正则,返回true或者false。
        var sStr3='abcdefg';
        var reg2=/def/g;
        console.log(reg2.test(sStr3));
        //4、Split:用符合正则的字符将字符串切割并存入数组,返回数组
        var sStr4='abc,aabbccdd,aaabbbcccddd';
        var reg3=/,/g;
        console.log(sStr4.split(reg3));
三. 模式修饰符:
a) 全局匹配g
    i. 练习:将abcdefgabcdefgabcdefg中所有的cde帅选出来
b) 不区分大小写i
    i. 练习:将abcdefgABCdefgABCdefg中所有的abc或者ABC帅选出来
c) 多行匹配m
    i. 练习:判断此字符的第二行是否以aa开头bcdefg\naabbccdd
 var str='abcdefgabcdefgabcdefg';
        //普通匹配
        console.log(str.match(/cde/));//一个cde
        //1、全局匹配g
        console.log(str.match(/cde/g));//三个cde
        //2、不区分大小写i
        var str2='abcdefgABCdefgABCdefg';
        console.log(str2.match(/abc/gi));
        //3、多行匹配m
        var str3='bcdefg\naabbccdd';
        var reg=/^aa/gm;
        console.log(str3);
        //test方法是用来判断字符串是否符合正则,返回true或者false
        console.log(reg.test(str3));
四. 匹配普通字符: 
    a) /普通字符/

    b) 以上例子都是匹配普通字符

五. 匹配方括号:

    a) /[a-z]/g:
        i. 匹配小写字母

        ii. 练习:提取“Aa1_Bb2$Cc3*Dd4&”中的小写字母

     b) /[A-Z]/g:
        i. 匹配大写字母
        ii. 练习:提取“Aa1_Bb2$Cc3*Dd4&”中的小写字母
    c) /[0-9]/:
        i. 匹配数字
        ii. 练习:提取“Aa1_Bb2$Cc3*Dd4&”中的数字
    d) [a-zA-Z0-9_]
        i. 匹配合法字符
        ii. 判断用户名“Aa1_Bb2$Cc3*Dd4&”是否只包含合法字符(大小写字母数字和下划线)。
    e) [^a-zA-Z0-9_]
        i. 匹配非法字符(除了大小写字母数字和下划线以外的字符)
        ii. 去掉用户名“Aa1_Bb2$Cc3*Dd4&”中的非法字符
     f) /[\u4e00-\u9fa5]/g;
        i. 匹配中文

        ii. 提取”Aa1我_Bb2$你Cc3*Dd4他&”

 /匹配方括号
        var str='Aa1_Bb2$Cc3*Dd4&';
        var str1='Aa1_Bb2Cc3Dd4';
        console.log(str.match(/[a-z]/g));//匹配小写字母
        console.log(str.match(/[aAbB]/g));//匹配括号中的每一个字符
        console.log(str.match(/[A-Z]/g));//匹配大写字母
        console.log(str.match(/[0-9]/g));//匹配0-9的数字


        var reg=/[a-zA-Z0-9_]/g;
        var reg1=/[^a-zA-Z0-9_]/g;
        console.log(str.match(reg));//匹配合法字符
        console.log(str.match(reg1));//匹配非法字符
        console.log(str1.match(reg1));//如匹配不到非法字符就返回null


        //判断用户名“Aa1_Bb2$Cc3*Dd4&”是否只包含合法字符(大小写字母数字和下划线)。
        //包含非法字符为true,说明该串字符中含有非法字符,应该输出false所以要取反
        console.log(!reg1.test(str1));//输出false


        //ii.去掉用户名“Aa1_Bb2$Cc3*Dd4&”中的非法字符
        console.log(str.replace(reg1,''));
 	   var str2='Aa1我_Bb2$你Cc3*Dd4他&';
        reg2=/[\u4e00-\u9fa5]/g;
        console.log(str2.match(reg2));//i.  匹配中文
六. 匹配元字符:
    a) .:匹配任意字符
    b) \d:匹配数字
        i. 相当于[0-9]
        ii. 练习:提取下列字符串中的电话号码:”我们的热线电话:020-888666999,欢迎拨打。”
    c) \D:匹配非数字
        i. 相当于[^0-9]
        ii. 练习:提取”Aa1_Bb2$Cc3*Dd4&”的非数字
      d) \w:匹配合法字符(大小写字母、数字、下划线)
        i. 相当于[a-zA-Z0-9_]
        ii. 练习:提取”Aa1_Bb2$Cc3*Dd4&”中的合法字符
      e) \W:匹配非法字符(除了大小写字母、数字、下划线的其他字符)
        i. 相当于[^a-zA-Z0-9_]
        ii. 练习:提取”Aa1_Bb2$Cc3*Dd4&”中的非法字符
    f) \s:匹配空白字符(包括空格、制表符、换行符)
        i. 练习:去掉用户名” Aa1_B  b2\t$Cc3*\nDd4&”中的所有的空白字符。
    g) \S:匹配非空字符

        i. 练习:提取” Aa1_B  b2\t$Cc3*\nDd4&”中的非空字符

   var str='abcdefgabcdefgabcdefg';
        var str2='Aa1_Bb2$Cc3*Dd4&';
        //a).:匹配任意字符
        console.log(str.match(/./g));
        //b)\d:匹配数字(相当于[^0-9]),提取下列字符串中的电话号码
        var str1='020-888666999,欢迎拨打';
        //匹配出来后将字符拼接起来,并用空字符隔开
        console.log(str1.match(/\d/g).join(''));
        //c)\D:匹配非数字(相当于[^0-9]),提取非数字
        console.log(str1.match(/\D/g));
        //d)\w:匹配合法字符(大小写字母、数字、下划线)(相当于[a-zA-Z0-9_])
        console.log(str2.match(/\w/g));
        //e)\W:匹配非法字符(除了大小写字母、数字、下划线的其他字符)(相当于[^a-zA-Z0-9_])
        console.log(str2.match(/\W/g));
        //f)\s:匹配空白字符(包括空格、制表符、换行符)
        //去掉用户名” Aa1_B  b2\t$Cc3*\nDd4&”中的所有的空白字符。
        var str3='Aa1_B  b2\t$Cc3*\nDd4&';
        var reg=/\s/g;
        console.log(str3.replace(reg,''));
        //g)\S:匹配非空字符
        console.log(str3.match(/\S/g).join(''));
七. 匹配量词:
    a) ?
        i. 匹配0个或者1个
        ii. 相当于:{0,1}
        iii. 练习:提取:abcaabbccaaabbbccc中所有的a
    b) *
        i. 匹配0个或者任意多个
        ii. 相当于:{0,}
        iii. 练习:提取:abcaabbccaaabbbccc中a,aa,aaa
    c) +
        i. 匹配1个或者任意多个
        ii. 相当于:{1,}至少匹配一个到无限个
        iii. 练习:提取:abcaabbccaaabbbccc中a,aa,aaa
    d) {n}
        i. 正好匹配n个
        ii. 练习:判断’123456’中是否正好是6位整数
    e) {n,m}
        i. 匹配n到m个
        ii. 练习; 提取:abcaabbccaaabbbccc中aa,aaa
 
//七.    匹配量词


        //a)?,匹配0个或者1个,相当于:{0,1}
        var str='abcaabbccaaabbbccc';
        //提取:abcaabbccaaabbbccc中所有的a,不是a的用空字符来代替
        console.log(str.match(/a?/g));
        //(19) ["a", "", "", "a", "a", "", "", "", "", "a", "a", "a", "", "", "", "", "", "", ""]
       
        //b)*,匹配0个或者任意多个,{0,},与?的区别是*可以连续匹配
        //提取:abcaabbccaaabbbccc中a,aa,aaa
        console.log(str.match(/a*/g));
        //(16) ["a", "", "", "aa", "", "", "", "", "aaa", "", "", "", "", "", "", ""]
       
        //c)+,匹配1个或者任意多个,相当于:{1,}
        //提取:abcaabbccaaabbbccc中a,aa,aaa
        console.log(str.match(/a+/g));
        //(3) ["a", "aa", "aaa"]


        //d){n},正好匹配n个
        var str1='123456';
        ///^\d{6}$S/g--表示以数字开头数字结尾,且结尾刚好是在第六个整数处
        console.log(/^\d{6}$/g.test(str1));//true


        //e){n,m},匹配n到m个
        //提取:abcaabbccaaabbbccc中aa,aaa
        console.log(str.match(/a{2,3}/g));
        //(2) ["aa", "aaa"]
八. 定位匹配:
    a) ^
        i. 匹配行首
        1. 行首字符必须是字母:/^[a-z]/i
        ii. 练习:判断用户名’a476572766’是否以字母开头
      
  //a)^,匹配行首
        //判断用户名’a476572766’是否以字母开头
        var str='Assa476572766';
        console.log(/^[a-z]/i.test(str));//true
    b) $
        i. 匹配行尾
        1. /com$/
        ii. 练习1:判断域名”www.baidu.com”是否以com结尾
        iii. 练习2:判断QQ号格式是否正确
        1. 判断规则:
        a) 第一位字符必须是1-9中的任意字符
        b) 其他字符必须是0-9中的任意字符
        c) QQ号位数限定为5-11位 
      
//b)$,匹配行尾
        //判断域名”www.baidu.com”是否以com结尾
        var str1='www.baidu.com';
        var reg=/com$/g;
        console.log(reg.test(str1));//true
        //判断QQ号格式是否正确
        var str3='43442422';
        //开头必须是1-9的数字,其他为0-9的数字,且只能为5-11位
        var reg1=/^[1-9]\d{4,10}$/g;
        console.log(reg1.test(str3));
    c) \b
        i. 匹配单词边界:
            1. JavaScript中单词:大小写字母、数字、下划线_
            2. 边界:边界的左边是单词,右边是非单词,所以边界不是一个字符,而是一个位置
        ii. 练习:
            1. 提取'aaa$123*____@'字符串中的位于单词边界的左右字符
                a) /.\b./g
            2. 去掉“we were we weex weae”中的单词we
                a) /\bwe\b/g

 //c) \b匹配单词边界:
        //边界:边界的左边是单词,右边是非单词,所以边界不是一个字符,而是一个位置
        //JavaScript中单词:大小写字母、数字、下划线_
        var str4='aaa$123*____@';
        //字符边界的左右可以为任意字符,.代表匹配任意字符
        var reg2=/.\b./g;
        //1.提取'aaa$123*____@'字符串中的位于单词边界的左右字符
        console.log(str4.match(reg2));//(3) ["a$", "3*", "_@"]
        //2、去掉“we were we weex weae”中的单词we
        var str5='we were we weex weae we';
         console.log(str5.match(/we\b/g));//(2) ["we", "we"];
d) \B:非单词边界
    i. 提取” We are ware hare_sare”中含有are且与非单词边界相邻的单词
    ii. 提取” We are ware hare_sare”中含有are且与单词边界相邻的单词
  
//d)\B:非单词边界,
         var str6='We are sware hare_sare';
        //i.    提取” We are ware hare_sare”中含有are且与非单词边界相邻的单词
         console.log(str6.match(/\Bare/g));//(3) ["are", "are", "are"]
         //ii.  提取” We are ware hare_sare”中含有are且与单词边界相邻的单词
         console.log(str6.match(/\bare/g))//["are"];
e) ():括号模式
    i. 括号中的正则当做整体来匹配,符合括号中正则的字符会被单独返回
        1. 练习:提取"¥99.8 $15.6945"中$15.6945
 f) X(?:y)
        i. 判断x后面匹配的是否是y
        ii. 匹配成功返回源字符串,否则返回null
        iii. 判断'javascript2015'中Javascript后接的是不是2015
        iv. /javascript(?:2015)/g
g) X(?=y)
        i. 判断x后面匹配的是否是y
        ii. 匹配成功返回x,否则返回null
        iii. 判断'javascript2015'中Javascript后接的是不是2015
        iv. /javascript(?=2015)/g
h) X(?!y)
        i. 判断x后面匹配的是否不是y
        ii. 匹配成功返回x,否则返回null
        iii. 判断'javascript2015'中Javascript后接的是否不是2015
        iv. /javascript(?!2015)/
i)
j) X|y|z:或模式
        i. 匹配x,y,z中的任意一个表达式,符合其中任意一个返回true
        ii. 练习:判断身份证格式是否正确
        iii. 身份证判断规则:
                1. 十五位纯数字:/^\d{15}$/g
                2. 18位纯数字:/^\d{18}$/g
        3. 17位纯数字加大写X或者小写x   :/^\d{17}(x|X)$/g
   


判断QQ号格式:
var qq  = '476572766';
        var reg = /^[1-9]\d{4,10}$/g
        console.log( reg.test(qq) );


判断身份证格式:
var str1 = '123456789123456';
        var str2 = '123456789123456789';
        var str3 = '12345678912345678X';
        var str4 = '12345678912345678X';
        var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(x|X)$)/g
        console.log( reg.test(str1) );
        console.log( reg.test(str2) );
        console.log( reg.test(str3) );
         console.log( reg.test(str4) );

 //e)():括号模式
         //提取"¥99.8 $15.6945"中$15.6945
         var str7='¥99.8 $15.6945';
         console.log(str7.match(/\$(\d+\.\d+)/));//$15.6945


         //g)X(?=y),判断x后面匹配的是否是y,匹配成功返回源字符串,否则返回null
         //iii. 判断'javascript2015'中Javascript后接的是不是2015
         var str8='javascript2015';
         console.log(str8.match(/javascript(?=2015)/g));//["javascript"]返回X


         //g)X(?=y),i.  判断x后面匹配的是否是y,ii.    匹配成功返回x,否则返回null
         console.log(str8.match(/javascript(?:2015)/g));//["javascript2015"]
         console.log(/javascript(?:2015)/g.test(str8));//true


        //h)X(?!y)i.判断x后面匹配的是否不是y,ii.匹配成功返回x,否则返回null
        console.log(/javascript(?!2015)/g.test(str8));//false


        //j)X|y|z:或模式,i.匹配x,y,z中的任意一个表达式,符合其中任意一个返回true
        //判断身份证格式是否正确
        var sStr='431128199787290';
        var rReg=/(^\d{15}$)|(^\d{18}$)|(^\d{17}(x|X)$)/;
        console.log(rReg.test(sStr));
验证手机号码格式:
var str = '18674578536';
        var reg = /^[1][3,5,8]\d{9}$/g;
        console.log( reg.test(str) );

验证邮箱格式:
var str = '[email protected]';
        var reg = /^\w+@[a-z0-9]+\.[a-z]{2,3}$/gi;
        console.log( reg.test(str) );

判断QQ号格式:
var qq  = '476572766';
        var reg = /^[1-9]\d{4,10}$/g
        console.log( reg.test(qq) );


判断身份证格式:
var str1 = '123456789123456';
        var str2 = '123456789123456789';
        var str3 = '12345678912345678X';
        var str4 = '12345678912345678X';
        var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(x|X)$)/g
        console.log( reg.test(str1) );
        console.log( reg.test(str2) );
        console.log( reg.test(str3) );
         console.log( reg.test(str4) );



猜你喜欢

转载自blog.csdn.net/DREAM_XA/article/details/80396588