題目1: \d摸袁,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$分別是什么?
\d digit 數(shù)字字符
\w word 單詞字符 (包括字母、數(shù)字叨粘、下劃線)
\s space 空白符 (包括制表符、換行符鸥跟、垂直制表符揽惹、換頁符、回車符秸弛、空格)
[a-zA-Z0-9] 大小寫字母及數(shù)字
\b border 單詞邊界铭若,包括字符串開頭、結(jié)尾递览,空白符號(hào)和中橫線 - 都可以作為單詞邊界
. 除了換行符叼屠、回車符之外的所有字符
* 量詞,代表任意次數(shù)
+ 量詞绞铃,至少出現(xiàn)一次
镜雨? 量詞,最多出現(xiàn)一次
x{3} 匹配 x連續(xù)出現(xiàn)3次 xxx
^ 邊界儿捧,以某某某開頭荚坞, 另外 ^ 有取反之意挑宠, 和 [ ] 組合可以創(chuàng)建反向類,如: [^abc] 表示不是a或者b或者c的字符
$ 邊界西剥,以某某某結(jié)尾
題目2: 寫一個(gè)函數(shù)trim(str)痹栖,去除字符串兩邊的空白字符
function trim(str){
return str.replace(/^\s+|\s+$/g, '')
}
trim(' 1231ffd sdfsdf s-&*^5 ') //"1231ffd sdfsdf s-&*^5"
題目3: 寫一個(gè)函數(shù)isEmail(str),判斷用戶輸入的是不是郵箱
function isEmail(str){
return /^\w\.?\w+@\w+(\.\w+)+$/.test(str)
}
isEmail('wangpeng199451@gmail.com') //true
題目4: 寫一個(gè)函數(shù)isPhoneNum(str)瞭空,判斷用戶輸入的是不是手機(jī)號(hào)
function isPhoneNum(str){
return /^1[34578]\d{9}$/.test(str)
}
isPhoneNum(14299092309) //true
題目5: 寫一個(gè)函數(shù)isValidUsername(str)揪阿,判斷用戶輸入的是不是合法的用戶名(長(zhǎng)度6-20個(gè)字符,只能包括字母咆畏、數(shù)字南捂、下劃線)
function isValidUsername(str){
return /^\w{6,20}$/.test(str)
}
isValidUsername('wangpeng199451') //true
題目6: 寫一個(gè)函數(shù)isValidPassword(str), 判斷用戶輸入的是不是合法密碼(長(zhǎng)度6-20個(gè)字符,只包括大寫字母旧找、小寫字母溺健、數(shù)字、下劃
function isValidPassword(str){
switch(true){
case !/^\w{6,20}$/.test(str):
return false
// return是直接結(jié)束當(dāng)前函數(shù)返回 break是直接結(jié)束當(dāng)前循環(huán)返回,這里函數(shù)內(nèi)只有循環(huán)钮蛛,可以省略 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: 寫一個(gè)正則表達(dá)式鞭缭,得到如下字符串里所有的顏色
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""]
這里數(shù)組 length = 1
因?yàn)槟J(rèn)是貪婪模式魏颓, .除換行回車之外的任意字符岭辣,也就包括了引號(hào),*代表任意次數(shù)甸饱,很貪婪盡可能多的匹配沦童,一只匹配到末尾,接著匹配正則表達(dá)式里的最后的引號(hào) "叹话,所以又倒著匹配偷遗,剛好第一個(gè)就是 " 。
var str = 'hello "hunger" , hello "world"';
var pat = /".*?"/g; // 只需要在這里給量詞 * 指定非貪婪模式即可
str.match(pat); // 輸出 [""hunger"", ""world""]