美文网首页
进阶7 正则表达式

进阶7 正则表达式

作者: 晓风残月1994 | 来源:发表于2017-09-07 19:57 被阅读18次

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

    \d digit 数字字符
    \w word 单词字符 (包括字母、数字、下划线)
    \s space 空白符 (包括制表符、换行符、垂直制表符、换页符、回车符、空格)
    [a-zA-Z0-9] 大小写字母及数字
    \b border 单词边界,包括字符串开头、结尾,空白符号和中横线 - 都可以作为单词边界
    . 除了换行符、回车符之外的所有字符

    • 量词,代表任意次数
    • 量词,至少出现一次
      ? 量词,最多出现一次
      x{3} 匹配 x连续出现3次 xxx
      ^ 边界,以某某某开头, 另外 ^ 有取反之意, 和 [ ] 组合可以创建反向类,如: [^abc] 表示不是a或者b或者c的字符
      $ 边界,以某某某结尾

    2: 写一个函数trim(str),去除字符串两边的空白字符

    function trim(str){
      return str.replace(/^\s+|\s+$/g, '')
    }
    trim(' 1231ffd sdfsdf s-&*^5 ') //"1231ffd sdfsdf s-&*^5"
    

    3: 写一个函数isEmail(str),判断用户输入的是不是邮箱

    function isEmail(str){
      return /^\w\.?\w+@\w+(\.\w+)+$/.test(str)
    }
     isEmail('wangpeng199451@gmail.com') //true
    

    4: 写一个函数isPhoneNum(str),判断用户输入的是不是手机号

    function isPhoneNum(str){
      return /^1[34578]\d{9}$/.test(str)
    }
    isPhoneNum(14299092309) //true
    

    5: 写一个函数isValidUsername(str),判断用户输入的是不是合法的用户名(长度6-20个字符,只能包括字母、数字、下划线)

    function isValidUsername(str){
      return /^\w{6,20}$/.test(str)
    }
    isValidUsername('wangpeng199451') //true
    

    6: 写一个函数isValidPassword(str), 判断用户输入的是不是合法密码(长度6-20个字符,只包括大写字母、小写字母、数字、下划

    function isValidPassword(str){
      switch(true){
        case !/^\w{6,20}$/.test(str):
          return false 
          // return是直接结束当前函数返回 break是直接结束当前循环返回,这里函数内只有循环,可以省略 break
        case /^[a-z]{6,20}$/.test(str):
          return false
        case /^[A-Z]{6,20}$/.test(str):
          return false
        case /^\d{6,20}$/.test(str):
          return false
        case /^_{6,20}$/.test(str):
          return false
        default:
          return true
      }
    }
    isValidPassword('wangpeng199451') //true
    

    7: 写一个正则表达式,得到如下字符串里所有的颜色

    var re = /#[0-9a-fA-F]{6}/g
    var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee "
    console.log( subj.match(re) )  // ['#121212', '#AA00ef']
    

    8: 下面代码输出什么? 为什么? 改写代码,让其输出[""hunger"", ""world""].

    var str = 'hello  "hunger" , hello "world"';
    var pat =  /".*"/g;
    str.match(pat); // 输出 [""hunger" ,hello "world""]   这里数组 length = 1
    

    因为默认是贪婪模式, .除换行回车之外的任意字符,也就包括了引号,*代表任意次数,很贪婪尽可能多的匹配,
    一只匹配到末尾,接着匹配正则表达式里的最后的引号 ",所以又倒着匹配,刚好第一个就是 " 。

    var str = 'hello  "hunger" , hello "world"';
    var pat =  /".*?"/g; // 只需要在这里给量词 * 指定非贪婪模式即可
    str.match(pat); // 输出 [""hunger"", ""world""]
    
    

    相关文章

      网友评论

          本文标题:进阶7 正则表达式

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