js 学习正则表达式+练习

 /*
            RegExp 创建正则表达式对象
            语法:
                var 变量 = new RegExp('正则表达式', '匹配模式')
                使用typeof检查正则对象,会返回object
                
            正则表达式的检测是否含有某个元素方法
            test()
                - 使用这个方法可以用来检查一个字符串是否符合正则表达式的规则
                    如果符合则返回true,否则返回false
        */
       var reg = new RegExp('a', '')
       console.log(reg) //输出 /a/ 正则表达式
       var str = 'a'
       console.log(reg.test(str))
/*
             字面量创建正则表达式
             var 变量 = /字符串/
        */
        var reg = /adadadfadf/
        /*
            i: 忽略大小写
            g:全局匹配模式
            |: 或
        */
        // i: 忽略大小写
        var reg1 = /a/
        var reg1_1 = /a/i // 忽略大小写
        console.log(reg1.test('A')) // 输出false
        console.log(reg1_1.test('A')) // 输出true
        // |: 或
        var reg2 = /ab/
        var reg2_2 = /a|b/ //或
        console.log(reg2.test('b')) // 输出false
        console.log(reg2_2.test('b')) // 输出true
        //g:全局匹配模式
        var reg3 = /a/
        var reg3_3 = /a/g //g:全局匹配模式
        console.log('adasagaha'.replace(reg3, '全局')) // 全局dasagaha
        console.log('adasagaha'.replace(reg3_3, '全局')) // 全局d全局s全局g全局h全局
/*
            []:里的内容也是或的关系
            [ab]   等同于 a|b
            [a-z]  任意小写字母
            [A-Z]  任意大写字母
            [A-z]  任意字母
        */
        // 检查一个字符串中是否含有abc 或adc 或aec
        var reg = /a[bde]c/
        console.log(reg.test('abc'))
/*
            [^ ]  除了括号任何字符
            ^     表示开头
            $     表示结尾
        */
        /*[^ ]  除了括号任何字符*/
        console.log(/[^a-z]/.test('a')) // 输出false
        console.log(/[^a-z]/.test('1')) // 输出true
        /*
            /^a/ 匹配开头a
        */
        console.log(/^a/.test('baadad')) // 输出false 
        console.log(/^a/.test('aeqeqeqa')) // 输出true
        /*
            /a$/ 匹配结尾a
        */
        console.log(/^a/.test('baadad')) // 输出false
        console.log(/a$/.test('aeqeqeqa')) // 输出true
        /*
            如果在正则表达式中同时使用^ $则要求字符串必须完全符合正则表达式
            /^a$/:表示只有a
            /^a|a$/:表示a开头或a结尾
        */ 
        console.log(/^a$/.test('aeqeqeqa')) // 输出false
        console.log(/^a|a$/.test('aeqeqeqa')) // 输出true
/*
            split()
            - 可以将一个字符串拆分为一个数组
            - 方法中可以传递一个正则表达式作为参数,这样方法将会根据正则表达式去拆分字符串 
        */
        /*根据任意字母将字符串拆分*/
        var str = '1a2b3c5d6e7f8g9h'
        console.log(str.split(/[A-z]/))
        // 输出  ["1", "2", "3", "5", "6", "7", "8", "9", ""]
/*
            search()
                -可以搜索字符串是否含有指定内容
                - 如果搜索到指定内容,则会返回第一次出现的索引,如果没有搜索到返回-1
                -它可以接受一个正则表达式作为参数,然后根据正则表达式去检索字符串
        */
        var str = 'hello abc hello adc afc aec'
        console.log(str.search(/a[A-z]c/))
        // 输出6
/*
            match()
            -可以根据正则表达式,从一个字符串中将符合条件的内容提前出来
            - 默认情况下我们的match只会找到第一个符合要求的内容,找到以后就会停止检索
            我们可以设置正则表达式为全局匹配模式,这样就会匹配到所有的内容
            可以为一个正则表达式设置多个匹配模式,且顺序无所谓
            -match() 会将匹配到的内容封装到一个数组中,即使只查询到一个结果
        */
        var str = '1a2b3c5d6e7f8g9h1A2B'
        console.log(str.match(/[a-z]/)) // 只会找到一个 输出[a]
        console.log(str.match(/[a-z]/g)) // 输出["a", "b", "c", "d", "e", "f", "g", "h"]
        /*
            /[a-z]/ig === /[a-z]/gi  顺序无所谓
        */
        console.log(str.match(/[a-z]/ig)) // 输出["a", "b", "c", "d", "e", "f", "g", "h", "A", "B"]
/*
            replace()
            - 可以将字符串中指定内容替换为新的内容
            -参数
                1.被替换的内容,可以接受一个正则表达式作为参数
                2.新的内容 
        */
        var str = '1a2b3c5d6e7f8g9h1A2B3'
        console.log(str.replace(/[a-z]/, '-')) //匹配到第一个小写字母替换 输出1-2b3c5d6e7f8g9h1A2B3
        console.log(str.replace(/[a-z]/g, '-')) //匹配到任意小写字母替换 输出1-2-3-5-6-7-8-9-1A2B3
        console.log(str.replace(/[a-z]/gi, '-')) //匹配到任意大小写字母替换 输出1-2-3-5-6-7-8-9-1-2-3
/*
            量词
                - 通过量词可以设置一个内容出现的次数
                - 量词只对它前边的一个内容起作用
                - {n} 正好出现n次
                - {m,n} 出现m-n次
                - {m,}  m次以上

            var reg = /a{3}/ // 表示a连续出现3次
            // ababab
            错误: var reg = /ab{3}/ // 表示靠近量词b连续出现3次
            正确: var reg = /(ab){3}/ // 表示ab出现3次
            var reg = /ab{1,3}c/ 表示b连续出现1~3次
            var reg = /ab{3,}c/ 表示b连续出现3次以上
        */
       console.log(/a{3}/.test('aab')) // 输出false
       console.log(/a{3}/.test('aaab')) // 输出true
       console.log(/ab{3}/.test('ababab')) // 输出false
       console.log(/(ab){3}/.test('ababab')) // 输出true
/*
            . 表示任意字符
            在正则表达式中使用\作为转义字符
            \. 表示检查一个字符串是否含有.
            \\ 表示\
            \w
                -任意字母、数字、_ [A-z0-9_]
            \W
                -除了任意字母、数字、_ [^A-z0-9_]
            \d
                -任意的数字[0-9]
            \D
                -除了数字[^0-9]
            \s
                -空格
            \S
                -除了空格
            \b
                - 单词边界
            \B
                - 除了单词边界
        */
        console.log(/\bchild\b/.test('hello children')) // 输出false
        console.log(/\bchild\b/.test('hello child !')) //输出true
/*
            练习题:
            创建一个正则表达式,用来检查一个字符串是否为正确手机号

            手机号的规则
            手机号长度11位 13599548365

            1.以1开头 ^1
            2.第二位3-9任意数字 [3-9]
            3.第三位以后任意数字9位 [0-9]{9}$
        */
       var phonetReg = /^1[3-9][0-9]{9}$/
       console.log(phonetReg.test('13599548365'))
 /*
            练习题:
            去除字符串前后空格 中间保留
        */
        // 规则
        // 开头空格0个或多个  /^\s*/
        // 结尾空格0个或多个 /\s*$/

        // 匹配到就结束了,不再匹配
        console.log('     hel  lo    '.replace(/^\s*|s*$/, '')) // 输出'hel  lo    '
        // g 全局匹配
        console.log('     hel  lo    '.replace(/^\s*|\s*$/g, '')) // 输出'hel  lo'

练习题
电子邮件
邮件格式:******.*@.com.cn

******.***@**.com.cn
任意字母数字下划线 (3位以上).任意字母数字下划线(至少一位数:+)@任意字母(至少一位数:+).任意字母数字(2-5之间).任意字母2-5之间
\w{3,}(.\w+)*@[A-z0-9]+.[A-z]{2,5}.[A-z]{2,5}
最后2个合并成一个(.[A-z]{2,5}){1,2}
必须有可有可无:*必须有必须有必须有可有可无,规则和前面一样 {1-2}:出现1~2
var reg = /\w{3,}(\.\w+)*@[A-z0-9]+(\.[A-z]{2,5}){1,2}/
       console.log(reg.test('dada.445@55.com.cs'))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值