第二十一彈-正則表達(dá)式

一、問答

1.\d秀存,\w,\s,[a-zA-Z0-9],\b,.,*,+,?,x{3},^$分別是什么?

\d :匹配數(shù)字 相當(dāng)于[0-9]
\w:匹配字母數(shù)字下劃線相當(dāng)于[A-Za-z0-9_]
\s :匹配空格(包括制表符透且、空格符撕蔼、斷行符等) 相當(dāng)于[\t\n\r\v\f]
[a-zA-Z0-9]: 匹配所有字母和數(shù)字
\b:表示單詞邊界:單詞邊界形成條件" "(空格)和"-"(橫杠)
. 字符:匹配除回車(\r)、換行(\n) 秽誊、行分割符(\u2028)和段分割符(\u2029)以外的所有字符
*字符: 匹配0到以上相當(dāng)于{0,}
+字符:匹配1到以上相當(dāng)于{1,}
?字符:匹配到0到1次相當(dāng)于{0,1}除此之外問號也可以做非貪婪模式
x{3}: 匹配3個x
位置字符:表示字符串開始位置鲸沮,$表示字符串結(jié)束位置,另外符號在中括號內(nèi)部表示不等于


2.貪婪模式和非貪婪模式指什么?

+符號和*符號默認(rèn)是盡可能的匹配更多的字符,這就是貪婪模式。
如果在后面加上問號锅论,就會變成一旦滿足條件后就不再匹配 這就是非貪婪模式讼溺。
*?:表示某個模式出現(xiàn)0次或多次,匹配時采用非貪婪模式
+?:表示某個模式出現(xiàn)1次或多次最易,匹配時采用非貪婪模式每聪。

/a+/.exec("aaa");           //["aaa"]
/a+?/.exec("aaa);          //["a"]       //滿足有一個a即可
/a+?b/.exec("aab")         //["aab"]    //滿足一個或者多個a后面有一個b
/a*?b/.exec("aab");           //["aab"]   //滿足0個或者多個a后面有一個b
/a*?b/.exec("b")                 //["b"]     //沒有a直接返回b

二绎秒、代碼

  • 寫一個函數(shù)trim(str),去除字符串兩邊的空白字符
function trim(str){
  if(!str) return "";
  if( typeof(str!=="string")){
      str+="";
    }
  if(str==="") return "";
  return str.replace(/^\s+/,"").replace(/\s+$/,"");
}

使用實現(xiàn) addClass(el, cls)、hasClass(el, cls)绑蔫、removeClass(el,cls)浆竭,使用正則

//使用實現(xiàn) addClass(el, cls)腊徙、hasClass(el, cls)响蓉、removeClass(el,cls),使用正則
function addClass(el,cls){
    var flag=hasClass(el,cls);
    if(flag===undefined) return;
    if(!flag){
      el.className=trim((el.className+" "+cls).replace(/\s{2,}/g," "));
    }
}
function removeClass(el,cls){
  var flag=hasClass(el,cls);
  if(flag===undefined) return;
  if(flag){
    //這里要排除\b匹配前后有"-"的情況,還要使用全局匹配
    var reg=new RegExp("(^|[^-])\\b"+cls+"\\b($|[^-])","g");
    el.className=trim(el.className.replace(reg,"").replace(/\s{2,}/g," "));
  }
}
function hasClass(el,cls){
  if(el&&el.className!=null&&cls!=null){
    var className=el.className;
    if(typeof className==="string"){
      className+="";
    }
    if(cls==="")  return true;
    if(className==="") return false;
    if(className===cls) return true;
    //這里要排除\b匹配前后有"-"的情況
     var reg=new RegExp("(^|[^-])\\b"+cls+"\\b($|[^-])");
     console.log(reg);
     console.log('ret',reg.test(className))
     return reg.test(className);
  }
}

寫一個函數(shù)isEmail(str)鄙早,判斷用戶輸入的是不是郵箱

function isEmail(str){
  if(!str) return;
  if(typeof str==="string") str+="";
  var reg=/^\w+@[A-Za-z0-9]+\.\w+$/;
  return reg.test(str);
}

寫一個函數(shù)isPhoneNum(str)汪茧,判斷用戶輸入的是不是手機號

function isPhoneNum(str){
  if(!str) return false;
  if(typeof str!=="string") str+="";
  var reg=/^1[358]\d{9}/;
  return reg.test(str);
}

寫一個函數(shù)isValidUsername(str),判斷用戶輸入的是不是合法的用戶名(長度6-20個字符限番,只能包括字母舱污、數(shù)字、下劃線)

function isValidUsername(str){
  if(!str) return false;
  if(typeof str==="string") str+="";
  var reg=/^\w{6,20}$/;
  return reg.test(str);
}

寫一個函數(shù)isValidPassword(str), 判斷用戶輸入的是不是合法密碼(長度6-20個字符弥虐,包括大寫字母扩灯、小寫字母别威、數(shù)字、下劃線至少兩種)

function isValidPassword(str){
  if(!str) return false;
  if(typeof str==="string") str+="";
  if(/^\w{6,20}$/.test(str)){
    var num=0;
    if(/[A-Z]/.test(str)) num++;
    if(/[a-z]/.test(str)) num++;
    if(/[0-9]/.test(str)) num++;
    if(/_/.test(str)) num++;
    if(num>=2) return true;
  }
  return false;
}

寫一個正則表達(dá)式驴剔,得到如下字符串里所有的顏色(#121212)

var reg=/#[0-9a-fA-F]{6}/g;
var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee #fd2 "
console.log("match",subj.match(reg))  // #121212,#AA00ef

下面代碼輸出什么? 為什么? 改寫代碼省古,讓其輸出hunger, world.

var str = 'hello  "hunger" , hello "world"';
var pat =  /".*?"/g;                                      //使用非貪婪模式
str.match(pat).toString().replace(/"/g,"").split(",");

補全如下正則表達(dá)式,輸出字符串中的注釋內(nèi)容. (可嘗試使用貪婪模式和非貪婪模式兩種方法)

//方法一
var str = '.. <!-- My -- comment \n test --> ..  <!----> .. '
var re = /<!--[^]*?-->/g
str.match(re) // '<!-- My -- comment \n test -->', '<!---->'
//方法二
re=/<!--(\w|\s|-)*(-->)/g;
str.match(re)

//補全如下正則表達(dá)式

var re = /<[^>]+>/g;
var str = '<> <a href="/"> <input type="radio" checked> <b>';
str.match(re) // '<a href="/">', '<input type="radio" checked>', '<b>'

參考文檔:饑人谷課件


本教程版權(quán)歸小韓同學(xué)和饑人谷所有丧失,轉(zhuǎn)載須說明來源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末豺妓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子布讹,更是在濱河造成了極大的恐慌琳拭,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件描验,死亡現(xiàn)場離奇詭異白嘁,居然都是意外死亡,警方通過查閱死者的電腦和手機膘流,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門絮缅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呼股,你說我怎么就攤上這事耕魄。” “怎么了彭谁?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵吸奴,是天一觀的道長。 經(jīng)常有香客問我缠局,道長则奥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任狭园,我火速辦了婚禮读处,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妙啃。我一直安慰自己档泽,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布揖赴。 她就那樣靜靜地躺著,像睡著了一般抑胎。 火紅的嫁衣襯著肌膚如雪燥滑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天阿逃,我揣著相機與錄音铭拧,去河邊找鬼赃蛛。 笑死,一個胖子當(dāng)著我的面吹牛搀菩,可吹牛的內(nèi)容都是我干的呕臂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼肪跋,長吁一口氣:“原來是場噩夢啊……” “哼歧蒋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起州既,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤谜洽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吴叶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阐虚,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年蚌卤,在試婚紗的時候發(fā)現(xiàn)自己被綠了实束。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡逊彭,死狀恐怖磕洪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诫龙,我是刑警寧澤析显,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站签赃,受9級特大地震影響谷异,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜锦聊,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一歹嘹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孔庭,春花似錦尺上、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至芽淡,卻和暖如春马绝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挣菲。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工富稻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留掷邦,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓椭赋,卻偏偏與公主長得像抚岗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哪怔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容