美文网首页
JavaScript 正则表达式

JavaScript 正则表达式

作者: 饥人谷_徐小坤 | 来源:发表于2016-09-17 21:40 被阅读0次

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

    • \d:查找数字
    • \w:查找单词字符,字母、数字、下划线
    • \s:查找空白字符
    • \b:匹配单词边界
    • .:查找除了回车符和换行符之外的所有字符
    • *:出现零次或多次(任意次)
    • +:出现一次或多次(至少出现一次)
    • ?:出现零次或一次(最多出现一次)
    • x{3}:匹配三位x字符
    • $:是以xxx开头,$是以xxx结尾

    2.贪婪模式和非贪婪模式指什么?

    贪婪模式:在整个表达式匹配成功的前提下,尽可能多的匹配,即匹配直到下一个字符不满足匹配规则为止。例如:

    var pat = 'aaa';
    pat.match(/a+/) // ["aaa"]
    

    非贪婪模式:让正则表达式尽可能少的匹配,也就是说一旦成功匹配不再继续尝试,做法很简单,在量词后加上?即可,例如:

    var pat = 'aaa';
    pat.match(/a+?/) // ["a"]
    

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

    function trim(str) {
        var reg = /^\s+|\s+$/g;
        return str = str.replace(reg,'');
    }
    

    4.使用正则实现 addClass(el, cls)、hasClass(el, cls)、removeClass(el,cls)

    function hasClass(el,cls) {
      var reg = /\s+|*\s/
      if (reg.test(el.className)) {
        return true
      }
      return false
    }
    
    function addClass(el,cls) {
      if (hasClass(el,cls)) {
        return false
      }
      el.className += " " + cls;
    }
    
    function removeClass(el,cls) {
      if (hasClass(el,cls)) {
        el.className.replace(cls,"")
      }
      return false
    }
    

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

    function isEmail(str){    
      var pat = /(\S)+[@]{1}(\S)+[.]{1}(\w)+/;
      return pat.test(str)
    }
    str = "aaaa@www.com_3";
    isEmail(str);
    
    输出结果

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

    function isPhoneNum(str){
        var pat = /^1[3456789]\d{9}$/;
        return pat.test(str);
    }
    
    输出结果

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

    function isValidUsernamr(str){
        var pat = /^\S\w{6,20}\S$/;
        return pat.test(str);
    }
    
    输出结果

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

    function isValidPassword(str) {
        if (str.length<6||str.length>20) {
            return false 
        }
        if (/[^a-zA-Z0-9_]/.test(str)) {
            return  false 
        }
        if (/(^[a-z]+$)|(^[A-Z]+$)|(^[\d]+$)|(^[_]+$)/.test(str)){
            return false 
        }
        return true
    }
    
    输出结果

    9.写一个正则表达式,得到如下字符串里所有的颜色(#121212)

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

    10.下面代码输出什么? 为什么? 改写代码,让其输出hunger, world

    var str = 'hello "hunger" , hello "world"';
    var pat = /".*"/g;
    str.match(pat); //由于是贪婪模式,匹配最长的,以“开始,以”结尾,会尽量多可能的匹配,所以是"hunger" , hello "world"。
    
    输出结果

    代码改写:

    var str = 'hello "hunger" , hello "world"';
    var pat = /".*?"/g;
    str.match(pat);//改为了非贪婪模式,匹配最短的。
    
    输出结果

    11.补全如下正则表达式,输出字符串中的注释内容. (可尝试使用贪婪模式和非贪婪模式两种方法)

    //非贪婪模式
    str = '.. <!-- My -- comment \n test --> .. <!----> .. '
    re = /<!--[\W\w]*?-->/g
    str.match(re) // '<!-- My -- comment \n test -->', '<!---->'
    
    //贪婪模式
    str = '.. <!-- My -- comment \n test --> .. <!----> .. '
    re = /<!--[^>]*-->/g
    str.match(re) // '<!-- My -- comment \n test -->', '<!---->'
    
    输出结果

    12.补全如下正则表达式

    //贪婪模式
    var re = /<[^>]+>/g
    var str = '<> <a href="/"> <input type="radio" checked> <b>'
    str.match(re) // '<a href="/">', '<input type="radio" checked>', '<b>'
    
    //非贪婪模式
    var re = /<[^>]+?>/g
    var str = '<> <a href="/"> <input type="radio" checked> <b>'
    str.match(re) // '<a href="/">', '<input type="radio" checked>', '<b>'
    
    输出结果

    相关文章

      网友评论

          本文标题:JavaScript 正则表达式

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