1. \d,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^$分別是什么?
- \d:匹配0-9之間的任一數字,相當于[0-9]
- \w:匹配任意的字母、數字和下劃線,相當于[A-Za-z0-9_]
- \s :用于查找空白字符。空白字符可以是:<strong>空格符、制表符、回車符 、換行符、垂直換行符、換頁符。</strong>
- [a-zA-Z0-9]:匹配任意的字母和數字
- \b:匹配單詞邊界。
- .:用于查找單個字符,除了換行和行結束符。
- *:匹配前面元字符0次或多次,/ba*/將匹配b,ba,baa,baaa ...
- +:匹配前面元字符1次或多次,/ba*/將匹配ba,baa,baaa...
- ?:匹配前面元字符0次或1次,/ba*/將匹配b,ba
- x{3}:查找x出現3次的元素
{n} 精確匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
- ^ :匹配一個輸入或一行的開頭,/^a/匹配"an A",而不匹配"An a"
- $ :匹配一個輸入或一行的結尾,/a$/匹配"An a",而不匹配"an A"
其他: - x|y: 匹配x或y
- \W :匹配非單詞字符,如[\W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。
- \S :匹配一個非空白字符,等于/[^\n\f\r\t\v]/
- \n :匹配一個換行符
- \r :匹配一個回車符
- \t: 匹配一個制表符
- \v :匹配一個重直制表符
- [xyz] :字符集(character set),匹配這個集合中的任一一個字符(或元字符)
- [^xyz] :不匹配這個集合中的任何一個字符
- \cX :X是一個控制符,/\cM/匹配Ctrl-M
2.寫一個函數trim(str),去除字符串兩邊的空白字符
function trim(str){
return str.replace(/^\s+|\s+$/g, '');
}
3.寫一個函數isEmail(str),判斷用戶輸入的是不是郵箱
function isEmail(str){
return /^[A-Za-z0-9._%-]+@([A-Za-z0-9-]+\.)+[A-Za-z]{2,4}$/.test(str)
}
4.寫一個函數isPhoneNum(str),判斷用戶輸入的是不是手機號
function isPhoneNum(str){
return /1[34578]\d{9}$/.test(str);
}
5.寫一個函數isValidUsername(str),判斷用戶輸入的是不是合法的用戶名(長度6-20個字符,只能包括字母、數字、下劃線)
function isValidUsername(str) {
return /^\w{6,20}$/.test(str);
}
6.寫一個函數isValidPassword(str), 判斷用戶輸入的是不是合法密碼(長度6-20個字符,只包括大寫字母、小寫字母、數字、下劃線,且至少包括兩種)
function isVaildPassword(str) {
if(str.length < 6 || str.length >20) return false;
if(/^[A-Z]+$/.test(str)) return false;
if(/^[a-z]+$/.test(str)) return false;
if(/^\d+$/.test(str)) return false;
if(/^_+$/.test(str)) return false;
return true;
}
7: 寫一個正則表達式,得到如下字符串里所有的顏色
var re = /#[a-zA-Z0-9]{6}/g;
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee #fd2 "
console.log( subj.match(re) )
8.下面代碼輸出什么? 為什么? 改寫代碼,讓其輸出['hunger', 'world'].
var str = 'hello "hunger" , hello "world"';
var pat = /".*"/g;//從"往后匹配直到最后一個"匹配結束
str.match(pat);//輸出[""hunger" , hello "world""]
//貪婪模式,正則表達式在匹配成功的前提下,盡可能多的匹配。
//在量詞*后面加個?讓其變為懶惰模式(匹配到結果就好,盡可能少的匹配)即可。
var str = 'hello "hunger" , hello "world"';
var pat = /".*?"/g;
str.match(pat)