1.\d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$分别是什么?
- 字符类:
\d是数字。\w是一个单词,里面可以是字母、数字、下划线。\s是空白符。[a-zA-Z0-9]是括号内的任意一个字符。\b是单词边界。. 是除了\n和\r的任意字符。 - 量词:
*是任意次数。+ 是最少一次。?是最多一次。x{3}表示3个x,括号里面是次数。 - 边界:
在[123]内表示取反,除了123之外的其它任意字符。在其它地方就表示以他后面的字符开头。$表示以它前面的字符结尾。 - 转义:
另外比较特殊的一类就是转义字符,比如你想匹配字符 “ . ” ,就得使用转义字符 “ \ . ”。
2.写一个函数trim(str),去除字符串两边的空白字符
第一种利用字符串转换:
var str = ' abc abcd ';
function trim(str) {
str = str.replace(/\s+/,''); //去掉开头的空白字符串
str = str.split('').reverse().join('').replace(/\s+/,''); //去掉结尾的空白字符串
return str;
}
console.log(trim(str));
第二种直接使用正则:
var str = ' abc abcd ';
function trim(str) {
str = str.replace(/^\s+|\s+$/g,'');
return str;
}
console.log(trim(str));
3.写一个函数isEmail(str),判断用户输入的是不是邮箱
function isEmail(str) {
var reg = /\w+@\w+[.]{1}\w+/g;
return reg.test(str);
}
另外还在网上找了一个比较正规的正则表达式:
^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$
4.写一个函数isPhoneNum(str),判断用户输入的是不是手机号
function isPhoneNum(str) {
var reg = /^1\d{10}$/g;
return console.log(reg.test(str));
}
var str = '13512345678';
var str2 = '135abcdefgh';
isPhoneNum(str);
isPhoneNum(str2);
5.写一个函数isValidUsername(str),判断用户输入的是不是合法的用户名(长度6-20个字符,只能包括字母、数字、下划线)
function isValidUsername(str) {
var reg = /\w{6,20}/g;
return console.log(reg.test(str));
}
var str = '12345',
str2 = 123456;
isValidUsername(str);
isValidUsername(str2);
6.写一个函数isValidPassword(str), 判断用户输入的是不是合法密码(长度6-20个字符,只包括大写字母、小写字母、数字、下划线,且至少至少包括两种)
function isValidPassword(str) {
var reg = /\w{6,20}/g,
reg2 = /[A-Z]{6,20}/g,
reg3 = /[a-z]{6,20}/g,
reg4 = /[0-9]{6,20}/g,
reg5 = /_{6,20}/g;
if(reg.test(str)){
if(reg2.test(str) || reg3.test(str) || reg4.test(str) || reg5.test(str)){
return false;
}else{
return true;
}
}else{
return false;
}
}
console.log(isValidPassword('aaaa'));
console.log(isValidPassword('AAAAAAA'));
console.log(isValidPassword('11111111'));
console.log(isValidPassword('_______'));
console.log(isValidPassword('sdf465'));
7.写一个正则表达式,得到如下字符串里所有的颜色
var re = /#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})(?=;)/g;
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee ";
console.log(subj.match(re)); // ['#121212', '#AA00ef']
8.下面代码输出什么? 为什么? 改写代码,让其输出[""hunger"", ""world""].
- 输出["hunger" , hello "world"]。match如果匹配到了返回一个数组,否则返回NULL。又因为正则表达式默认为贪婪模式,该正则表达式没有规定匹配范围,所以最大化范围进行匹配,得到上述结果。
- 改写之后的代码如下:
var str = 'hello "hunger" , hello "world"';
var pat = /".{1,6}"/g;
str.match(pat);