正则表达式(进阶7)

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

  • \d:匹配数字0到9,即[0-9]
  • \w:匹配az、AZ、0~9和下划线,即[a-zA-Z_0-9]
  • \s:匹配空白符
  • [a-zA-Z0-9]:匹配az、AZ和0~9
  • \b:以单词做边界
  • .:匹配除了回车和换行符以外的字符,即[^\r\n]
  • *:匹配零次或多次(任意次),即[0,]
  • +:匹配至少1次(1次或多次),即[1,]
  • ?:匹配0次或1次,即[0,1]
  • x{3}:匹配3个x('xxx'),即/xxx/
  • $:表示以xxx开始,$表示以xxx结束

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

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

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

const isEmail = (str)=>{
    return /^\w+@[\w.]+$/.test(str);
}

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

const isPhoneNum = (str)=>{
    return /^(\+029-)?1\d{10}$/.test(str);
}

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

const isValidUsername = (str)=>{
    return /^\w{6,20}$/.test(str);
}

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

const isValidPassword = (str)=>{
    if(/^\w{6,20}$/.test(str)){
        let flag = 0;
        if(/[A-Z]/.test(str)) {
            flag++;
        }
        if(/[a-z]/.test(str)){
            flag++;
        }
        if(/[0-9]/.test(str)){
            flag++;
        }
        if(/_/.test(str)){
            flag++;
        }      
        if(flag>=2){
            return true;
        }      
    }
    return false;
}

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

1.简单情况:颜色都是6位,且前后多出字符不考虑(例如'color: 12#1234560'也可以匹配)
var re = /#[a-zA-Z0-9]{6}/g;  //todo
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee "
console.log( subj.match(re) )  // ['#121212', '#AA00ef']
2.全面考虑:,一个表达式我实现不了
var re = /[\s|:]#([\da-fA-F]{6}|[\da-fA-F]{3})($|;|\s)/g;
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee; color1:#123 ; color2:#3454; ";
let newArray = subj.match(re).map((e)=>{
    return e.replace(/^:|\s|;|\s$/g,'');
});
console.log( newArray );  // ["#121212", "#AA00ef", "#123"];

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

var str = 'hello  "hunger" , hello "world"';
var pat =  /".*"/g;
str.match(pat);
//输出["hunger" , hello "world"]
//原因:量词在默认下是尽可能多的匹配的,也就是大家常说的贪婪模式,此模式下会尽可能多的匹配
//==========================
//修改目的:输出['hunger', 'world']
let req = /".*?"/g;
//在量词后面加个?,就是非贪婪模式,该模式会尽可能少的匹配
str.match(req);
//['hunger', 'world']

你可能感兴趣的:(正则表达式(进阶7))