1. \d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^$分别是什么?
- \d 表示数字字符
- \w 表示文本字符,字母、数字、下划线(\W 大写表示属性相反的字符)
- \s 匹配空格(包括制表符、空格符、断行符等),相等于[\t\r\n\v\f]
- [a-zA-Z0-9] 表示与(a到Z,A到Z,0-9的任何字符匹配)
- \b 匹配词的边界
- . 表示匹配任意字符 /c.b/ cab、c7b、c-b都可进行匹配
- 表示一个模式出现0次货多次
- 表示一个模式出现1次货多次
- ?表示一个模式出现0次或者1次
- x{3} 模式的精准匹配次数{n}表示重复n次,{n,}表示至少重复n次,{n,x}表示重复次数在n-x之间
- ^ 例如 /^ab/ 表示以ab开头的字符
- $ 例如 /$cd/ 表示以cd结尾的字符
2. 贪婪模式和非贪婪模式指什么?
贪婪和非贪婪模式是指字符串量词在进行匹配时,贪婪模式按照最大可匹配数进行匹配,
而非贪婪模式匹配一次则就停止;如没有进行说明,默认是进行贪婪模式
3. 写一个函数trim(str),去除字符串两边的空白字符
function trim(str){
return str.replace(/^\s+|\s+$/g,"");
}
trim(" dff ")
4. 使用正则实现 addClass(el, cls)、hasClass(el, cls)、removeClass(el,cls)
function hasClass(el,cls){
var reg=new RegExp(' "\\s|^"+cls+"\\b|$" ',"g");
return reg.test(el.className)
}
if(reg.test(el.className)){
console.log("has "+cls)
}else{
console.log("don't has "+cls)
}
function addClass(el,cls){
var reg=new RegExp(' "\\s|^"+cls+"\\b|$" ',"g");
return reg.test(el.className)
}
if(reg.test(el.className)){
console.log("alread has "+cls)
}else{
console.log(el.className+cls)
}
function addClass(el,cls){
var reg=new RegExp(' "\\s|^"+cls+"\\b|$" ',"g");
return reg.test(el.className)
}
if(reg.test(el.className)){
var new=el.className.replace(cls,"")
console.log(new)
}else{
console.log("don't has "+cls)
}
5. 写一个函数isEmail(str),判断用户输入的是不是邮箱
function isEmail(str){
var email=/\w{5,20}@\w{1,5}\.[^@]/;
return email.test(str);
}
6. 写一个函数isPhoneNum(str),判断用户输入的是不是手机号
function isPhoneNum(str){
var phonenum=/1[3578]\d{9}/
return phonenum.test(str);
}
7. 写一个函数isValidUsername(str),判断用户输入的是不是合法的用户名(长度6-20个字符,只能包括字母、数字、下划线)
function isValidUsername(str){
var validname=/^\w{6,20}$/;
return validname.test(str);
}
8. 写一个函数isValidPassword(str), 判断用户输入的是不是合法密码(长度6-20个字符,包括大写字母、小写字母、数字、下划线至少两种)
function isValidPassword(str){
var reg = /^\w{6,20}$/,
capital = /^[A-Z]{6,20}$/,
lowercase = /^[a-z]{6,20}$/,
digit = /^\d{6,20}$/,
underline = /^_{6,20}$/;
if(reg.test(str)){
if(capital.test(str) | lowercase.test(str) | digit.test(str) | underline.test(str)){
return false;
}else{
return true;
}
}else{
return false;
}
}
先判断密码是否是6-20个\w组成的字符,然后在判断是否为单一的属性
11. 写一个正则表达式,得到如下字符串里所有的颜色(#121212)
var re= /#[0-9a-zA-Z]{6}/g;
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee #fd2 ";
alert(subj.match(re))
10. 下面代码输出什么? 为什么? 改写代码,让其输出hunger, world
var str = 'hello "hunger" , hello "world"'; //非贪婪模式
var pat = /".*?"/g;
str.match(pat);
var str = 'hello "hunger" , hello "world"'; //贪婪模式
var pat = /"[^"]*"/g;
str.match(pat);
11. 补全如下正则表达式,输出字符串中的注释内容
str = '.. <!-- My -- comment \n test --> .. <!----> .. ' //非贪婪模式
var re = /<[^]*?>/g
str.match(re)
str = '.. <!-- My -- comment \n test --> .. <!----> .. '//贪婪模式
var re = /<[^<]*>/g
str.match(re)
12.补全如下正则表达式
var re = /<\w[^]*?>/g
var str = '<> <a href="/"> <input type="radio" checked> <b>'
str.match(re)