http://www.cnblogs.com/yitian/archive/2008/11/14/1333569.html
題目1: \d摊鸡,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^,$分別是什么?
下面是一些常見的元字符:
. 匹配除 \n 以外的任何字符(注意元字符是小數(shù)點(diǎn))。
[abcde] 匹配 abcde 之中的任意一個(gè)字符
[a-h] 匹配 a 到 h 之間的任意一個(gè)字符
[^fgh] 不與 fgh 之中的任意一個(gè)字符匹配
\w 匹配大小寫英文字符及數(shù)字 0 到 9 之間的任意一個(gè)及下劃線嘉裤,相當(dāng)于 [a-zA-Z0-9_]
\W 不匹配大小寫英文字符及數(shù)字 0 到 9 之間的任意一個(gè),相當(dāng)于 [^a-zA-Z0-9_]
\s 匹配任何空白字符月而,相當(dāng)于 [ \f\n\r\t\v]
\S 匹配任何非空白字符郁副,相當(dāng)于 [^\s]
\d 匹配任何 0 到 9 之間的單個(gè)數(shù)字桅打,相當(dāng)于 [0-9]
\D 不匹配任何 0 到 9 之間的單個(gè)數(shù)字讨盒,相當(dāng)于 [^0-9]
[\u4e00-\u9fa5] 匹配任意單個(gè)漢字(這里用的是 Unicode 編碼表示漢字的 )
下面是一些常見的限定符 ( 下表中 n 和 m 都是表示整數(shù)解取,并且 0<n<m) :
* 匹配 0 到多個(gè)元字符,相當(dāng)于 {0,}
? 匹配 0 到 1 個(gè)元字符返顺,相當(dāng)于 {0,1}
{n} 匹配 n 個(gè)元字符
{n,} 匹配至少 n 個(gè)元字符
{n,m} 匹配 n 到 m 個(gè)元字符
+ 匹配至少 1 個(gè)元字符禀苦,相當(dāng)于 {1,}
\b 匹配單詞邊界
^ 字符串必須以指定的字符開始
$ 字符串必須以指定的字符結(jié)束
另外題目中的
[a-zA-Z0-9] 包含所有英文小寫字母a-z和大寫字母A-Z,以及數(shù)字0-9
x{3} 量詞遂鹊,表示x出現(xiàn)3次
題目2: 寫一個(gè)函數(shù)trim(str)振乏,去除字符串兩邊的空白字符
function trim(str){
if(typeof str === 'string'){
return str.replace(/^\s+|\s+$/g,'');
}else{
return '不是字符串';
}
}
題目3: 寫一個(gè)函數(shù)isEmail(str),判斷用戶輸入的是不是郵箱
function isEmail(str){
var email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/稿辙;
return email.test(str);
}
題目4: 寫一個(gè)函數(shù)isPhoneNum(str),判斷用戶輸入的是不是手機(jī)號(hào)
function isPhoneNum(str){
var num = /^1[0-9]{10}$/;
return num.test(str);
}
題目5: 寫一個(gè)函數(shù)isValidUsername(str)气忠,判斷用戶輸入的是不是合法的用戶名(長(zhǎng)度6-20個(gè)字符邻储,只能包括字母、數(shù)字旧噪、下劃線)
function isVaildUsername(str){
return /^\w{6,20}$/.test(str);
}
題目6: 寫一個(gè)函數(shù)isValidPassword(str), 判斷用戶輸入的是不是合法密碼(長(zhǎng)度6-20個(gè)字符吨娜,只包括大寫字母、小寫字母淘钟、數(shù)字宦赠、下劃線,且至少至少包括兩種)
function isValidPassword(str){
if(!/^\w{6,20}$/.test(str)){
return false;
}
if(/^\d{6,20}$/.test(str)){
return false;
}
if(/^[a-z]{6,20}$/.test(str)){
return false;
}
if(/^[A-Z]{6,20}$/.test(str)){
return false;
}
if(/^_{6,20}$/.test(str)){
return false;
}
return true;
}
題目7: 寫一個(gè)正則表達(dá)式米母,得到如下字符串里所有的顏色
var reg = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{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""].
var str = 'hello "hunger" , hello "world"';
var pat = /".*"/g;
str.match(pat);
意思是:匹配以"開頭"結(jié)束,且引號(hào)中為任意個(gè)除換行符和回車以外的任意字符铁瞒,全局匹配妙色。
默認(rèn)是貪婪模式,會(huì)盡可能多匹配慧耍,所以結(jié)果為
[""hunger" , hello "world""]
而要想得到[""hunger"", ""world""]的結(jié)果可以將正則改為如下代碼:
可以加上身辨?變成非貪婪模式 盡可能少匹配
var pat = /".*?"/g;