美文网首页
正则表达式

正则表达式

作者: NathanYangcn | 来源:发表于2017-01-17 20:10 被阅读0次
    • 关键词:正则表达式

    我的理解:明确目的规则,了解正则字符含义,拼凑正则规则模板,就像作者写文章

     1. 正则表达式,又称规则表达式。计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
     2. 正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达式具有处理能力。
     3. 所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。
    

    1. \d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^$ 分别是什么?

    符号 含义 备注
    \d 预定义类:数字字符,包括:数字 [0-9]
    \w 预定义类:单词字符,包括:字母、数字、下划线 [a-zA-Z_0-9]
    \s 预定义类:空白符 [\t\n\x0B\f\r]
    [a-zA-Z0-9] 范围类:包括:字母、数字
    . (点) 元字符:除了换行和回车之外的任意字符 [^\n\r]
    * 量词:出现零次或多次(任意次)
    + 量词:出现一次或多次(至少出现一次)
    ? 量词:出现零次或一次(最多出现一次)
    x{3} 量词:匹配 出现 3 次的 x
    \b 边界:单词边界 与\B相反
    ^ 边界:以xxx开头
    $ 边界:以xxx结尾

    2. 编写函数trim(str),功能:去除字符串两边的空白字符

    • 思路
     1. 要求:删除开头结尾的空白字符
     2. 匹配:匹配开头结尾的空白字符  // 开头^; 空白字符\s; 出现任意次*; 或|; 结尾$; 
     3. 替换:替换掉匹配到的空白字符  // str.replace(x, y)
    
    • 代码
    function trim(str){
        var deleteBlank = /^\s*|\s*$/g;  // 正则匹配筛选
        var back = str.replace(deleteBlank, '');  // 字符串替换去除
        return back;
    }
    var result1 = trim(' dd   dd dd   ');
    var result2 = trim('   ddd ddd  dd');
    console.log(result1);  // dd   dd dd
    console.log(result2);  // ddd ddd  dd
    

    3. 编写函数isEmail(str),功能:判断用户输入的是不是邮箱

    • 思路
     1. 要求:确定邮箱格式:xxx@xxx.com(对比163的部分规则)
     2. 建造:根据要求建立规则模式
     3. 判断:用户输入格式是否符合要求
     4. 反馈:合法格式——提示:‘欢迎回来!’;非法格式——提示:‘邮箱输入错误!’
     5. 防火,防盗,放拼写错误!
    
    • 代码
    function isEmail(str){
        var emailFormat = /^[a-zA-Z]\w{5,17}@\w+\.[a-z]{2,4}$/g;
        var back = emailFormat.test(str);  // 注意 test 的拼写,不要错写为 text
        if(back === true){
            return '欢迎回来!';
        }else {
            return '邮箱输入错误!';
        }
    } 
    var result1 = isEmail('nathanyang1991@163.com');
    console.log(result1);  // 欢迎回来!
    var result2 = isEmail('LOL7@qq.com');
    console.log(result2);  // 邮箱输入错误!
    

    4.编写函数isPhoneNum(str),功能:判断用户输入的是不是手机号

    • 思路
     1. 要求:确定手机号码格式:1xxxxxxxxxx 【2. 3. 略——翻看第2题】
     4. 反馈:合法格式——提示:‘欢迎回来!’;非法格式——提示:‘手机号码输入错误!’
    
    • 代码
    function isPhoneNum(str) {
        var num = /^1\d{10}$/;
        var back = num.test(str);
        if(back === true){
            return '欢迎回来!';
        }else {
            return '手机号码输入错误!';
        }
    }
    var result1 = isPhoneNum('18966668888');
    console.log(result1);  // 欢迎回来!
    var result2 = isPhoneNum('6896666');
    console.log(result2);  // 手机号码输入错误!
    

    5. 编写函数isValidUsername(str),功能:判断用户输入的是不是合法的用户名

    • 思路
     1. 要求:用户名格式:长度6-20个字符,只能包括字母、数字、下划线 
     4. 反馈:合法格式——提示:‘用户名输入正确!’;非法格式——提示:‘用户名输入错误!’
    
    • 代码
    function isValidUsername(str){
        var username = /^\w{6,20}$/g;
        var back = username.test(str);
        if(back === true){
            return '用户名输入正确!';
        }else {
            return '用户名输入错误!';
        }
    }
    var result1 = isValidUsername('Teemo');   // 萌神提莫
    console.log(result1);  // 用户名输入错误!
    var result2 = isValidUsername('Ezreal');  // 伊泽瑞尔
    console.log(result2);  // 用户名输入正确!
    

    6. 编写函数isValidPassword(str),功能:判断用户输入的是不是合法密码

    • 思路
     1. 要求:用户名格式:长度6-20个字符,只包括大写字母、小写字母、数字、下划线,且至少至少包括两种 
     4. 反馈:合法格式——提示:‘密码正确!’;非法格式——提示:‘密码错误!’
    
    • 代码
    function isValidPassword(str) {
        if(!/^\w{6,20}$/g.test(str)) return '密码格式错误';  // 非 \w{6,20} 错误
        if(/^\d{6,20}$/g.test(str)) return '密码格式错误';  // 全是数字 错误
        if(/^[a-z|A-Z]{6,20}$/g.test(str)) return '密码格式错误';  // 全是字母错误
        if(/^_{6,20}$/g.test(str)) return '密码格式错误';  // 全是下划线错误
        return '密码格式正确';  // 其他正确
    }
    var result1 = isValidPassword('mima666');
    console.log(result1);  // 密码格式正确
    var result2 = isValidPassword('wodemima');
    console.log(result2);  // 密码格式错误
    var result3 = isValidPassword('mima');
    console.log(result3);  // 密码格式错误
    

    7. 编写正则表达式,功能:得到如下字符串里所有的颜色

    • 思路
     1. 要求:颜色格式—— #xxxxxx (16进制颜色)
     2. 建造:根据要求建立模式规则
     3. 筛选:匹配颜色字符,得到结果
    
    • 代码
    /*var re = 正则补全*/
    var re = /#[0-9a-fA-F]{6}|#[0-9a-fA-F]{3}!\w$/g;
    var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee "
    console.log( subj.match(re) )  // ['#121212', '#AA00ef']
    

    8.1 下面代码输出什么? 为什么?

    var str = 'hello  "hunger" , hello "world"';
    var pat =  /".*"/g;
    str.match(pat);
    
    • 输出:" "hunger", hello "world" "
    • 原因:
     1. 结果以字符串中出现的:第一个引号作为开始,最后一个引号作为结束 ———— 进行匹配划分
     2. 首先匹配引号,并将引号作为字符串的开头 "和结尾(不懂正则解析规则)"
     3. ' .* ' 相当于 任意字符{0,∞} ,贪婪模式下会按照无穷大进行匹配 
     4. 正则表达式默认处于贪婪模式(并未触发其非贪婪模式,使用 ‘?’ 即可触发)
     5. 贪婪模式:按规定的最大值进行匹配
     6. 非贪婪模式:按规定的最小值进行匹配
    

    8.2 改写代码,让其输出["hunger", "world"]

    • 思路
     1. 两个字符串都以 引号 作为开头和结尾:即见到 引号 就作为开头和结尾进行划分
     2. 应该触发其非贪婪模式:按照最小值进行匹配
     3. 非贪婪模式:使用 ‘?’ 触发,如下
    
    • 代码改写
    var str = 'hello  "hunger" , hello "world"';
    var pat =  /".*?"/g;
    str.match(pat);
    
    • 此时输出:" "hunger", "world" "

    本文章著作权归饥人谷和作者所有,转载须说明来源!

    相关文章

      网友评论

          本文标题:正则表达式

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