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""]