前端基礎(chǔ)(問答16)


keywords: 正則表達(dá)式雕憔。


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

\d:查找數(shù)字

\w:查找單詞字符(字母、數(shù)字结借、下劃線即(a-zA-Z0-9_))

\s:查找空白字符(空格、回車卒茬、換行映跟、tab即( \r\n\f\t\v))

[a-zA-Z0-9]:查找a-z、A-Z扬虚、0-9中的任意一個(gè)字符

\b:匹配單詞邊界努隙,一側(cè)為單詞字符(\w),另一側(cè)為非單詞字符辜昵、字符串的開始(^)或結(jié)束位置($)

.:查找單個(gè)字符荸镊,除了換行和行結(jié)束符(\n),如果要匹配包括“\n”在內(nèi)的所有字符,一般用[\s\S]或者[^]堪置。

+:匹配+前面的字符一次或多次

*****:匹配*前面的字符零次以上

?:匹配?前面的字符零次或一次

x{3}:匹配連續(xù)三個(gè)x

^n:脫字符號(hào)躬存,用來把n錨定在這一行的開頭。

[^abc]:查找任何不再方括號(hào)中的字符

n$:美元符號(hào)舀锨,用來把n錨定在這一行的結(jié)尾岭洲。

參考:
\b 單詞邊界
正則表達(dá)式參考

  • 貪婪模式和非貪婪模式指什么?

? * + {min坎匿,max} 默認(rèn)是貪婪的盾剩,即在符合正則表達(dá)式的前提下雷激,盡可能多的匹配字符串。
相應(yīng)的告私,非貪婪模式指盡可能少的匹配字符串屎暇。
比如:

“This is a <EM>first</EM> test”
如果用\<.+>\去匹配,預(yù)期得到<EM>驻粟,但事實(shí)上得到的是<EM>first</EM>
這就是貪婪模式

上述例子中使用非貪婪模式有兩種辦法:
1根悼、\<.+?>\ (量詞后面接?可以使量詞進(jìn)入非貪婪模式蜀撑,匹配盡可能少的內(nèi)容)
2挤巡、\<[^<]+>\
參考:
深入淺出之正則表達(dá)式

代碼題

  • 寫一個(gè)函數(shù)trim(str),去除字符串兩邊的空白字符

function trim(str) {
    return str.replace(/^\s+|\s+$/g,'')
}

  • 使用正則實(shí)現(xiàn) addClass(el, cls)酷麦、hasClass(el, cls)玄柏、removeClass(el,cls)

function addClass(el , cls) {
    if (! hasClass(el , cls)) {
        el.className += ' ' + cls
    }
    
}


function hasClass(el , cls) {
    var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)' , 'g')
    return reg.test(el.className)
}


function removeClass(el , cls) {
    if (hasClass(el , cls)) {
        var reg = new RegExp('(\\s|^)' + cls + '(\\b|$)' , 'g')  
        el.className = el.className.replace(reg , '')
    }
}
  • 寫一個(gè)函數(shù)isEmail(str),判斷用戶輸入的是不是郵箱

function isEmail(str) {
    var reg = /^(\w)+(\.\w+)*@(\w)+((\.\w{2,3}){1,3})$/
    return reg.test(str)
}

郵箱驗(yàn)證圖解
郵箱驗(yàn)證圖解

參考:
JS正則表達(dá)式結(jié)構(gòu)圖解

  • 寫一個(gè)函數(shù)isPhoneNum(str)贴铜,判斷用戶輸入的是不是手機(jī)號(hào)

function isPhoneNum(str) {
    var reg = /^((\+86)|(86))?1[3-9]\d{9}$/
    return reg.test(str)
}
手機(jī)號(hào)驗(yàn)證圖解
手機(jī)號(hào)驗(yàn)證圖解
  • 寫一個(gè)函數(shù)isValidUsername(str)粪摘,判斷用戶輸入的是不是合法的用戶名(長(zhǎng)度6-20個(gè)字符,只能包括字母绍坝、數(shù)字徘意、下劃線)

function isValidUsername(str) {
    var reg = /^[a-zA-Z]\w{5,19}$/
    return reg.test(str)
}
用戶名驗(yàn)證圖解
用戶名驗(yàn)證圖解
  • 寫一個(gè)函數(shù)isValidPassword(str), 判斷用戶輸入的是不是合法密碼(長(zhǎng)度6-20個(gè)字符,包括大寫字母轩褐、小寫字母椎咧、數(shù)字、下劃線至少兩種)

function isValidPassword(str) {
    var reg = /^\w{6,20}$/
    if (reg.test(str)) {
        if (str.match(/^[A-Z]+$/)) return false
        else if (str.match(/^[a-z]+$/)) return false
        else if (str.match(/^[0-9]+$/)) return false
        else if (str.match(/^_+$/)) return false
        else return true
    } else return false
}
  • 寫一個(gè)正則表達(dá)式把介,得到如下字符串里所有的顏色(#121212)


var re =/(#[0-9A-F]{6}\b)|(#[0-9A-F]{3})\b/ig

var subj = "color: #121212; background-color: #AA00ef; width: 12px; bad-colors: f#fddee #fd2 "

subj.match(re)  // #121212,#AA00ef #fd2

  • 下面代碼輸出什么? 為什么? 改寫代碼勤讽,讓其輸出hunger, world.

var str = 'hello  "hunger" , hello "world"';
var pat =  /".*"/g;        //匹配的內(nèi)容:引號(hào)、若干字符拗踢、引號(hào)脚牍。又因?yàn)?默認(rèn)為貪婪模式,因此會(huì)盡可能匹配符合正則的內(nèi)容
str.match(pat);  


//["hunger" , hello "world"']

//===============改寫====================

var str = 'hello  "hunger" , hello "world"';
var pat =  /".*?"/g;      
str.match(pat);  
  • 補(bǔ)全如下正則表達(dá)式巢墅,輸出字符串中的注釋內(nèi)容. (可嘗試使用貪婪模式和非貪婪模式兩種方法)


================非貪婪模式========================

str = '.. <!-- My -- comment \n test --> ..  <!----> .. '
re = /<!--[^]*?-->/g

str.match(re) // '<!-- My -- comment \n test -->', '<!---->'


================貪婪模式========================

    
str = '.. <!-- My -- comment \n test --> ..  <!----> .. '
re = /<!--[^>]*-->/g

str.match(re) // '<!-- My -- comment \n test -->', '<!---->'
  • 補(bǔ)全如下正則表達(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)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诸狭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子君纫,更是在濱河造成了極大的恐慌驯遇,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蓄髓,死亡現(xiàn)場(chǎng)離奇詭異叉庐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)会喝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門陡叠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玩郊,“玉大人,你說我怎么就攤上這事匾竿⊥咭耍” “怎么了蔚万?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵岭妖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我反璃,道長(zhǎng)昵慌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任淮蜈,我火速辦了婚禮斋攀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梧田。我一直安慰自己淳蔼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布裁眯。 她就那樣靜靜地躺著鹉梨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪穿稳。 梳的紋絲不亂的頭發(fā)上存皂,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音逢艘,去河邊找鬼旦袋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛它改,可吹牛的內(nèi)容都是我干的疤孕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼央拖,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼胰柑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起爬泥,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤柬讨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后袍啡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踩官,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年境输,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔗牡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颖系。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖辩越,靈堂內(nèi)的尸體忽然破棺而出嘁扼,到底是詐尸還是另有隱情,我是刑警寧澤黔攒,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布趁啸,位于F島的核電站,受9級(jí)特大地震影響督惰,放射性物質(zhì)發(fā)生泄漏不傅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一赏胚、第九天 我趴在偏房一處隱蔽的房頂上張望访娶。 院中可真熱鬧,春花似錦觉阅、人聲如沸崖疤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劫哼。三九已至,卻和暖如春痴柔,著一層夾襖步出監(jiān)牢的瞬間沦偎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工咳蔚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留豪嚎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓谈火,卻偏偏與公主長(zhǎng)得像侈询,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子糯耍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

  • 轉(zhuǎn)自: JS正則表達(dá)式一條龍講解扔字,從原理和語法到JS正則、ES6正則擴(kuò)展温技,最后再到正則實(shí)踐思路 溫馨提示:文章很長(zhǎng)...
    前端渣渣閱讀 1,812評(píng)論 1 32
  • 一革为、字符串操作 PHP開發(fā)中,我們遇到最多的可能就是字符串舵鳞。 一個(gè)字符串 通過下面的3種方法來定義: 1震檩、單引號(hào) ...
    空谷悠閱讀 756評(píng)論 1 6
  • 初衷:看了很多視頻、文章,最后卻通通忘記了抛虏,別人的知識(shí)依舊是別人的博其,自己卻什么都沒獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,009評(píng)論 0 20
  • 突然傳來“噩耗”英語老師(班主任)和才剛教我們一周的物理老師雙雙懷孕了…… 又要換老師了迂猴。 說真的慕淡,非常不舍我們班...
    墨書竹閱讀 316評(píng)論 0 0
  • 這是一個(gè)奇妙的世界我常常忘記了憂慮的負(fù)重和踽踽的獨(dú)行 我每日走進(jìn)偉人們的詩行再每晚溫柔地走向你身旁固執(zhí)地像孩童那是...
    長(zhǎng)亭怨慢閱讀 588評(píng)論 12 21