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]:匹配所有的单词字母和数字
- \b:单词边界
- .:匹配除了回车和换行符之外的所有字符
[^\r\n]
- *:匹配在
*
之前的字符出现零次或多次(任意次) - +:匹配在
+
之前的字符出现一次或多次(最少一次) - ?:匹配在
?
之前的字符出现零次或一次(最多一次) - {3}:匹配在
{3}
之前的字符出现3次 - ^:
^
用来检查匹配的字符串是否在所匹配字符串的开头,但^
出现在中括号内则为取反 - $:用来检查匹配的字符串是否在所匹配字符串的结尾
2. 写一个函数trim(str),去除字符串两边的空白字符
function trim(str) {
str = str.replace(/^\s+|\s+$/g,'');
return str;
}
trim(' hello'); //"hello"
trim(' hello world '); //"hello world"
3. 写一个函数isEmail(str),判断用户输入的是不是邮箱
function isEmail(str) {
var reg = (/^\w+@\w+\.\w+$/);
return reg.test(str);
}
isEmail('1234@qq.com'); //true
isEmail('1234@qqcom'); //false
4. 写一个函数isPhoneNum(str),判断用户输入的是不是手机号
function isPhoneNum(str) {
var reg = (/^1[3578]\d{9}$/);
return reg.test(str);
}
isPhoneNum('13522728998'); //true
isPhoneNum('1352272899812345'); //false
5. 写一个函数isValidUsername(str),判断用户输入的是不是合法的用户名(长度6-20个字符,只能包括字母、数字、下划线)
function isValidUsername(str) {
var reg = /^\w{6,20}$/;
return reg.test(str);
}
isValidUsername('zhoucheng'); //true
isValidUsername('zhou'); //false;
isValidUsername('zhou-cheng'); //false
6. 写一个函数isValidPassword(str), 判断用户输入的是不是合法密码(长度6-20个字符,只包括大写字母、小写字母、数字、下划线,且至少至少包括两种)
function isValidPassword(str) {
var reg = /^\w{6,20}$/,
reg1 = /^[a-z]{6,20}$/,
reg2 = /^[A-Z]{6,20}$/,
reg3 = /^[0-9]{6,20}$/,
reg4 = /^_{6,20}$/;
return reg.test(str) && !reg1.test(str) && !reg2.test(str) && !reg3.test(str) && !reg4.test(str);
}
isValidPassword('zhoucheng123'); //true
isValidPassword('zhoucheng'); //false
7. 写一个正则表达式,得到如下字符串里所有的颜色
var re = /#[a-fA-F0-9]{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""]
因为正则表达式默认为贪婪模式,即在匹配成功的前提下,尽可能多的匹配字符,而/".*"/g
可以匹配双引号之间除回车和换行符之外的所有字符,于是就出现了[""hunger" , hello "world""]
的结果,如果让其输出[""hunger"", ""world""]
,可在代表数量的标示符后放置 ? 来开启非贪婪模式。
var str = 'hello "hunger" , hello "world"';
var pat = /".*?"/g;
str.match(pat); //[""hunger"", ""world""]
网友评论