day_21 js之正则表达式

一、正则表达式:字符串的校验(验证) --- 字符串

                正则的创建

                字面量创建 /匹配的字符串/

                实例化对象 new RegExp('匹配的字符串')

       // 双斜杠 --- 判断字符串中是否有字符能匹配 good

        const reg1 = /good/

        // regular expression 简写    

        // 实例化对象

        const reg2 = new RegExp('good')

        console.log(reg1,reg2);

        //   /good/ /good/

二、正则的修饰符

        i ignore 忽略大小写

        var reg1 = /tmd/i

        g global 全局的

        const reg2 = /tmd/g

        //  构造函数的第一个参数表示匹配的字符,第二个参数表示修饰符

        const reg3 = new RegExp('tmd','gi')

        const str = 'hello tmd hei Tmd tmd'

        // replace 默认只会替换第一个

        console.log(str.replace('tmd','**'));

        console.log(str.replace(/tmd/ig,'**'));

        console.log(str.replace(reg3,'**'));

三、正则的方法 

           text()    返回布尔值

           exec()    返回的是一个数组 --- 总是匹配一个,如果匹配不到就返回null        

           补充知识点

            [ ]  ->  true

        const reg = /tmd/ig

        const str = 'hello tmd Tmd'

        // test正则的方法  测试字符串中是否有匹配正则的内容 -- 布尔值  一般次正则不需要全局匹配
        console.log(reg.test(str)); // true /


        // 返回的是一个数组 --- 总是匹配一个,如果匹配不到就返回null
        console.log(reg.exec(str));
        // ['Tmd', index: 10, input: 'hello tmd Tmd', groups: undefined]

四、正则的内容

  正则的语法

           |   或者  

           []  或者(区间)  [0-9] [1-9] [a-z] [A-Z] [0-9a-zA-Z]

           空格也会被匹配 --- 一般正则不写空格

 正则的元字符

         次数匹配

          *  0次或者多次     {0,}

          ? 0次或者1次      {0,1}

          +  1次或者多次     {1,}

          {m,n}   m次到n次

          {m,}    至少m次

          {m}   m次

       

        ^    以...开头

        $    以...结尾

        ^ $   同时使用可以把正则规定死


 

        . 匹配任意字符

 

五、转义字符 

 转义使用 \

        //  匹配 \/
        const reg = /\ \//
        console.log(reg.test(' \/'));

        //  匹配 .
        const reg2 = /\./

        //  匹配[
        const reg3 = /\[/

        console.log(reg3.test('[]]')); // true

        console.log(reg2.test('hq')); // false

        // + ? * {} 匹配的次数,需要前面有匹配的东西
        // const reg4 = /+/   
        // 报错 /+/: Nothing to repeat
        const reg4 = /\+/   
        console.log(reg4.test('+'));  // true
      

六、简写 

        \d 数字       

        \D 非数字       

        \w  数字,字母,下划线 [0-9a-zA-Z_]

        \W  非数字,字母,下划线

        \s  匹配空白字符

        \S  匹配非空白字符

            空白字符和空字符不一样

            空字符 .{0}

七、中文    

            中文匹配

            [\u4e00-\u9fa5]

        const reg = /^[\u4e00-\u9fa5]{3,6}$/

        console.log(reg.test('你好啊')); // true

 八、字符串使用到正则的方法

        charAt()   访问角标对应的值

        charCodeAt()    访问角标对应的值的ASCII值  

        String.fromCharCode() 把ASCII值转成对应的字符

        includes()  判断数组中是否存在某个值

        indexOf()   判断数组中是否存在某个值,返回第一次出现的下标,找不到就

                           返回-1

        lastIndexOf() 判断数组中是否存在某个值,返回最后一次出现的下标

        slice(i,i)  截取数组中的部分值,返回一个新的数组  

        substring(i,i) //截取(1,2)角标 第2个到第3个

        substr(i,数量) //    (2,2)    第2个开始截2个

        toUpperCase()大写    toLowerCase()小写

        concat() +  拼接数组,返回一个新的数组

        split() 把字符串切割成数组

        replace(old,new)   替换(默认只会替换第一个)

        trim()  去掉首尾的空格
 

        能接受正则的方法

        replace(要查找的,替换的)  默认只会替换一次,因此需要正则

        search()  一般和indexOf是一样的,但是search还可以接受正则

        match()   找到满足条件的字符,默认只会找到第一个,全局匹配才能找到所有的,如果找不到就返回null

        split() 把字符串切割成数组,也可以接受正则的写法

        // 替换敏感词
        function replaceMinGan(str,arr,n){
            n = n || '**';
            // const mgc = ['tmd','md','wc'];
            const word = arr.join('|');
            const reg = new RegExp(word,'ig')
            return str.replace(reg,n)
        }

        const mgc = ['tmd','md','wc']
        const res = replaceMinGan('wc,正则真tmd简单啊,Wc',mgc)
        console.log(res); // **,正则真**简单啊,**
        const str2 = 'good day day up'
        console.log(str2.search('day'));  
        // 5     search = indexOf


        console.log(str2.search(/da*y/gi)); 
        // 5  search 可以使用正则,但是indexOf不能使用正则

        console.log(str2.match(/da*y/gi)); // 找到满足条件的字符  ['day', 'day']
        const str3 = 'good   good  study  day  day  up'        
        // 贪婪匹配
        console.log(str3.split(/ +/));
        // ['good', 'good', 'study', 'day', 'day', 'up']

九、常见的正则练习

        //    邮箱   123@qq.com  123@qq.cn 123@qq.com.cn

        //    必须有@,@前面必须有内容,.com或者.cn或者.com.cn结尾

        const reg = /^[\w,\+]+@\w+\.(com|cn|com\.cn)$/

        console.log(reg.test('1,+23@q.com.cn'));
        // true

          // 身份证号 18位  17位数字+数字或者X 

          // 身份证  6位  4位出生年份  2月份  2日期  3数字 ,数字或者X

        // 身份证号 18位  17位数字+数字或者X
        const reg2 = /^\d{17}[\dX]$/ 
        console.log(reg2.test('22222219990929191X'));
        // true

        // 身份证  6位  4位出生年份  2月份  2日期  3数字 ,数字或者X
        const reg3=/^\d{6}(19|20)\d{2}(0|1)\d(0|1|2|3)\d{4}[\dX]$/
        console.log(reg3.test('22222219991929191X'));
        // true

     // 删除所有的空格 

        // 删除所有的空格
        const str = '   good good  study day day up  '
        // const arr = ['',' ','  '] ...
        // 替换
        console.log(str.replace(/ +/g,''));
         // goodgoodstudydaydayup 替换成空 就相当于把它删了

       // 删除首尾空格 

        console.log(str); 
        console.log(str.replace(/^ +| +$/g,''));
        // good good  study day day up

       // 删除多余的空格 

        console.log(str.replace(/ +/g,' '));
        //  good good study day day up 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值