美文网首页
es6语法 正则

es6语法 正则

作者: 简单的名字吧 | 来源:发表于2017-03-22 23:09 被阅读0次

    正则 规则
    正则表达式 规则表达式
    Regular Expression
    弄一个正则:
    new RegExp('表达式',['选项']);

    字符串上面有两个方法:
    str.search(expr或字符串) //查找,搜索
    在str中找,找字符串或表达式expr匹配的内容,如果找到的话,
    就返回第1个出现的位置,如果找不到,就返回-1
    -- indexOf

        var exp = new RegExp('A');
        str.search(exp);
    
    str.match(expr或字符串);  //匹配
        在str中匹配,按expr或字符串来匹配,如果能匹配到,
        返回匹配结果的数组,如果匹配不到,返回 null
        
        match方法,通常是配合正则表达式来使用。
    

    正则中的选项:

    g   global  全局(在全局,在整个字符串中找,如果不加这个选项,那么只匹配一次)
    var expr = new RegExp('A','g'); //在整个字符串中匹配 A
    
    i   ignore  忽略大小写
    
    new RegExp('a','gi');   //选项可以写在一起,并且没有选后顺序
    

    正则的简写:

    不简写:  var expr = new RegExp('a','gi');
    简写:
        /表达式/选项
        var expr = /a/gi;
    

    转义:
    字符串转义: 换行 \n
    \n 换行
    \ 显示一个
    \\显示两个 \
    正则里转义:
    \d 数字

    正则的特性:
    1、懒 g
    var str = 'sdfd2332';
    str.match(/\d/) --> 2
    2、笨
    var str = 'dss23 23fs fd2332s';
    str.match(/\d/g); --> 2,3,2,3,2,3,3,2

        解决笨: 量词
    
        正则里量词:
            +   有一个或多个---  最少有1个,最多不限
            ?   有0个或1个 -- 最少有0个,最多1个  —— 有或没有
            *   最少0个,最多不限 ——建议尽量少用,因为效率低
    
        var str = 'dss23 23fs fd2332s';
        str.match(/\d+/g);  --> 23,23,2332 
        
    3、贪
        var str = 'dss234566778876555678 23fs fd2332s';
        str.match(/\d+/g);  
    

    正则特性: 懒 笨 贪

    敏感词过滤:
    思路:就是把一些预先设定好的词汇,用
    来代替
    字符串的方法:
    str.replace('要替换的东西','替换成什么');
    let str = '我们国家真好';
    str.replace('国家','
    ');
    str.replace方法: 只能替换一次
    *replace如果不配合正则使用,它就是一个废物
    str.replace('要替换的东西或正则','替换成什么');
    str.replace('要替换的东西或正则','替换成什么字符串 或 自定义函数');
    str.replace('a','b'); //把a替换成b了

            str.replace('a',function(s){
                //s  表示的就是每次匹配的结果
                //返回值 返回的是什么,就替换成什么
            });
    

    正则中的或: |

    小总结:
    new RegExp(表达式,选项);
    str.search
    str.match
    str.replace
    懒 (会享受) 笨(萌) 贪(有追求)

    正则中的修饰:
    ^ 行首 匹配的是一行第一个字符的前面
    $ 行尾 匹配的是一行最后一个字符的后面

    选项:
        g       全局
        i       忽略大小写
        m       多行模式 multi-line
    
    ^   行首  
    $   行尾
        
    单行模式:匹配的整个字符串的开头和结尾
    多行模式:匹配的一行的开头和结尾
    

    选项:
    g i m
    /\d/gim
    /\d/img
    量词:
    {n} n个
    {n,m} 最少n个,最多m个
    {n,} 最少n个,最多不限
    {0,1} 最少0个,最多1个—— ?
    {0,} 最少0个,最多不限——*
    {1,} 最少1个,最多不限——+
    + 最少1个,最多不限
    * 最少0个,最多不限
    ? 最少0个,最多1个
    正则中的 []:
    1)或的关系
    a[bce]c abc acc aec
    2)范围 [-]
    [0-9] 从0到9
    [a-z] 从a到z
    [A-Z] 从A到Z
    [a-zA-Z] a到z 或者 A到Z (大写字母或小写字母——所有字母)
    [12-49] 1或 者2到4或者 9 (1,2,3,4,9)

    年龄:满18周岁  18-100岁
        18
        19
        20-99
        100
        /[18-100]/  ×
        
        把问题拆解,拆解一个一个的简单问题(在这个例子,注意所有的东西都是字符)
    
        要求:  18 19 20 21 ..... 100
        解题:
            18,19 :  1[89]
            20-99:  [2-9]\d
            100:        100
            
            (1[89]) | ([2-9]\d) | (100)
    

    3)排除 [^]
    排除[^xxx] ^ 后面的字符

    a[^bc]d     第一个字符是a
                第二个字符不能是 b,也不能是c
                第三个字符是d
    

    转义:
    \d 表示所有数字
    \w 字母、数字、下划线
    \s 空白 (空格 换行 tab)

    \D  非数字
    \W  不是 字母、数字、下划线 _
    \S  不是空白
    
    \b  单词边界(任何可以分隔单词的东西)
    ***还有好多自己去看
    

    str.search()
    str.match()

    正则对象.test('字符串')

    var reg = new RegExp('\d+','g');
    reg.test('sds232')
    --如果不能匹配 ,返回 true
    --如果能匹配,返回false
    reg.test()
    ——有一些严重性问题,不太严谨
    用test,需要在表达式的前后,加 ^ $
    在正则中,如果使用 或(|) ,那么一定要加括号——每个条件和整体都加括号

    例1:
    验证手机号:
    整体11位
    第一位:1 1
    第二位:3,4,5,7,8 [34578]
    剩余部分: \d{9}

        1[34578]\d{9}
    

    例2:
    座机号
    8723678
    87232982
    010-83232323
    0423-3239325

        规则:
        
            区号          电话号
        
        区号:
            1)第1位                   0
            2)第2位不是0                [1-9]
            2)第3位或第4位是数字        \d{1,2}
            4)- 1个
            
            整体上看,可有可无           ?
        电话:
            第1位不是0      [1-9]
            6到7位数字      \d{6,7}
    
        合: (0[1-9]\d{1,2}\-)?[1-9]\d{6,7})
    

    例3:
    邮箱:
    zhanghaibin@zhinengshe.com
    zhang@sina.com.cn
    6181742@qq.com
    zhang_1234@sohu.com

        分为几个部分:
            邮箱的名字(@前面):
                字母,数字,下划线,最长20位
                \w{1,20}
    
            @
    
            域名:
                字母,数字,-
                [a-zA-Z0-9\-]{1,10}
            域名后缀:
                .com
                .cn
                .com.cn
                
                (\.[a-zA-Z]{2,3}){1,2}
    
        合:\w{1,20}@[a-zA-Z0-9\-]{1,10}(\.[a-zA-Z]{2,3}){1,2}
    

    关于字符串的几个小方法:
    indexOf lastIndexOf charAt substring toUpperCase toLowerCase split match search
    1、去除首尾空格
    jquery: $.trim('| s sds fds |')

    原生:  str.trim()  ——   不支持低级浏览器
    
    /^\s+|\s+$/g
    

    2、ES6 判断是否由小串开始
    str.startsWith('abc'); 不兼容IE系
    自己用正则实现: /^abc/
    3、ES6 判断是否由小串结尾
    str.endsWith('bd'); 不兼容IE系
    自己用正则实现:/bd$/

    相关文章

      网友评论

          本文标题:es6语法 正则

          本文链接:https://www.haomeiwen.com/subject/sgbanttx.html