Js正則常備不忘

以前后端同事爬了別人家的網(wǎng)站,需要分析文本工猜,他是想要知道如何通過(guò)ClassName定位,后來(lái)盡然是讓我寫個(gè)正則匹配表達(dá)式馅袁。汗域慷,趁記憶力的熱乎勁兒寫一篇非常規(guī)文章。

?正則表達(dá)式是什么

???正則表達(dá)式是一個(gè)描述字符模式的對(duì)象汗销,按照人的語(yǔ)言習(xí)慣犹褒,當(dāng)我們讀一段文字的時(shí)候第一印象,下面有一段文字弛针,我們可以通過(guò)多種方式描述它叠骑,而每一種方式描述的都是下面一段文字:

###幾種使用情況
····處理字符串
··需要從一段字符串中提取想要的部分                     ->match exec
··需要將一段字符串中的一部分替換組成新的字符串           ->replace
··需要將一段字符串處理成想要的數(shù)組                     ->split
····判斷字符串
··判斷字符串是需要的                                 ->test
··判斷字符串是需要的,并確定匹配位置                    ->search
###組織正則語(yǔ)言
要匹配的字符串str
正則/a(\d+)[abc]rico(?=wang)/
/   a               (\d+)           [abc]        rico(?=wang)/
 str是否有a
   ↙ ↘
no      yes   → 至少要有一個(gè)數(shù)字
                     ↙  ↘
                  no     yes  →  返回()匹配的結(jié)果 → → 括號(hào)內(nèi)容會(huì)被`exec` `match`最后返回
                                        ↓
                                  有a削茁,或者b宙枷,或者c
                                     ↙   ↘  
                                   no      yes   → rico后面必須跟上wang
                                                   ↙   ↘  
                                                 no      yes → 只匹配不返回()匹配的結(jié)果
var str = 'a1cricowang'
str.match(reg) 返回:["a1crico","1"] //返回的數(shù)組第一項(xiàng)是所有匹配結(jié)果,第二項(xiàng)為()匹配的結(jié)果
var str = 'a121cricowang'
str.match(reg) 返回:["a1crico","121"] //返回的數(shù)組第一項(xiàng)是所有匹配結(jié)果茧跋,第二項(xiàng)為()匹配的結(jié)果
reg.test(str) 返回: true
? 幾種匹配符
  • \d 匹配一個(gè)非負(fù)整數(shù)慰丛, 等價(jià)于 [0-9]
  • \s 匹配一個(gè)空白字符
  • \w 匹配一個(gè)英文字母或數(shù)字,等價(jià)于[0-9a-zA-Z]
  • . 匹配除換行符以外的任意字符瘾杭,等價(jià)于[^\n]
?量詞
  • * 匹配零個(gè)或更多個(gè)诅病,即0~n
  • + 匹配一個(gè)或更多個(gè),即至少一個(gè),1~n
  • ? 匹配一個(gè)或零個(gè)
  • {} 一般用來(lái)表示匹配的長(zhǎng)度贤笆,比如\d{3}表示匹配三個(gè)數(shù)字蝇棉,\d{1,3} 表示匹配1~3個(gè)數(shù)字,\d{3,} 表示匹配3個(gè)以上數(shù)字芥永。
? [] 是定義匹配的字符范圍篡殷。比如 [a-zA-Z0-9] 表示字符文本要匹配英文字符和數(shù)字
  • 單字符取一個(gè),比如[abc]會(huì)匹配abc
  • 一個(gè)[]的內(nèi)容一次只能匹配一個(gè)字符
  • []里面的特殊符有五個(gè):-,\,^埋涧,其他字符都是普通字符板辽,包括*,. ,?
  • ^[^的首位時(shí)候才有特殊意義
  • [a|b|c]匹配的是a,|,b,|,c,五個(gè)中的其中任意一個(gè)。
?()圓括號(hào)()是組飞袋,主要應(yīng)用在限制多選結(jié)構(gòu)的范圍/分組/捕獲文本/環(huán)視/特殊模式處理

示例:

  • (abc|bcd|cde)戳气,表示這一段是abc链患、bcd巧鸭、cde三者之一均可,順序也必須一致
  • (abc)?麻捻,表示這一組要么一起出現(xiàn)纲仍,要么不出現(xiàn),出現(xiàn)則按此組內(nèi)的順序出現(xiàn)
  • (?:abc)表示找到這樣abc這樣一組贸毕,但不記錄郑叠,不保存到$變量中,否則可以通過(guò)$x取第幾個(gè)括號(hào)所匹配到的項(xiàng)明棍,比如:(aaa)(bbb)(ccc)(?:ddd)(eee)乡革,可以用$1獲取(aaa)匹配到的內(nèi)容,而$3則獲取到了(ccc)匹配到的內(nèi)容摊腋,而$4則獲取的是由(eee)匹配到的內(nèi)容沸版,因?yàn)榍耙粚?duì)括號(hào)沒(méi)有保存變量
  • a(?=bbb) 順序環(huán)視 表示a后面必須緊跟3個(gè)連續(xù)的b
  • (?i:xxxx) 不區(qū)分大小寫 (?s:.*) 跨行匹配.可以匹配回車符
?^$
  • ^ 匹配一個(gè)字符串的開(kāi)頭,比如 (^a) 就是匹配以字母a開(kāi)頭的字符串

  • $ 匹配一個(gè)字符串的結(jié)尾,比如 (b$) 就是匹配以字母b結(jié)尾的字符串

  • ^還有另個(gè)一個(gè)作用就是取反兴蒸,比如[^xyz] 表示匹配的字符串不包含xyz

?幾種需要轉(zhuǎn)義的:( [ { \ ^ $ | ) ? * + .] }
?string方法,接受一個(gè)正則對(duì)象 string.fn(reg)
  • match返回結(jié)果:存放匹配結(jié)果的數(shù)組视粮。該數(shù)組的內(nèi)容依賴于 regexp 是否具有全局標(biāo)志 g
  • search返回結(jié)果:第一個(gè)與 regexp 相匹配的子串的起始位置,如果沒(méi)有找到任何匹配的子串,則返回-1橙凳,search()方法不執(zhí)行全局匹配蕾殴,它將忽略標(biāo)志g。
  • replace 返回結(jié)果:一個(gè)新的字符串岛啸,是用 replacement 替換了 regexp 的第一次匹配或所有匹配之后得到的
  • split返回結(jié)果:一個(gè)字符串?dāng)?shù)組钓觉,按照正則匹配進(jìn)行分割而成的數(shù)組
?RegExp 對(duì)象方法,接受一個(gè)字符串 reg.fn(string)
  • test則是用來(lái)檢測(cè)字符串是否匹配某一個(gè)正則表達(dá)式,如果匹配就會(huì)返回true,反之則返回false
  • exec返回一個(gè)數(shù)組坚踩,其中存放匹配的結(jié)果荡灾。如果未找到匹配,則返回值為 null。
?matchexec的區(qū)別
  • 一個(gè)是字符串的方法卧晓,一個(gè)是正則的方法芬首,接受參數(shù)類型不一樣
  • 在有g參數(shù)的全局匹配情況下,返回的結(jié)果不一樣逼裆,match一次返回所有匹配結(jié)果郁稍,exec是使用一次,返回一個(gè)匹配結(jié)果胜宇,下次使用返回下一個(gè)匹配結(jié)果
?貪婪模式和非貪婪模式
  • 其實(shí)可以簡(jiǎn)單的理解耀怜,貪婪模式就是盡可能多的匹配,非貪婪模式就是盡可能少的匹配.
  • 貪婪模式量詞:{x,y} , {x,} , ? , * , 和 +,匹配到它需要的第一個(gè)滿足條件之后,貪婪模式則會(huì)繼續(xù)向右邊進(jìn)行匹配下去
  • 非貪婪模式量詞: {x,y}?桐愉,{x,}?财破,??*?从诲,和 +?,所以非貪婪模式就是在貪婪模式后面加了一個(gè)問(wèn)號(hào),當(dāng)它匹配到它需要的第一個(gè)滿足條件之后左痢,他就會(huì)停止了。而系洛。
?零寬正向斷言和負(fù)向斷言俊性,只做判斷是否符合()中的規(guī)則,并不匹配()中的規(guī)則描扯。
  • (?=)零寬正向斷言: 括號(hào)內(nèi)表示某個(gè)位置右邊必須和=右邊匹配上
  • (?!)負(fù)向斷言: 括號(hào)內(nèi)表示某個(gè)位置右邊不和!后的字符匹配定页。

補(bǔ) : 發(fā)現(xiàn)缺少全面的正則基礎(chǔ)知識(shí)查找 補(bǔ)一條連接點(diǎn)這里,缺少的可以在這里找绽诚,比如說(shuō)哪個(gè)字符是匹配大小寫之類的典徊。2018.5.25更新

文章分三次更新,后期不定期更新修改

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恩够,一起剝皮案震驚了整個(gè)濱河市卒落,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玫鸟,老刑警劉巖导绷,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異屎飘,居然都是意外死亡妥曲,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門钦购,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)檐盟,“玉大人,你說(shuō)我怎么就攤上這事押桃】” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)羡忘。 經(jīng)常有香客問(wèn)我谎痢,道長(zhǎng),這世上最難降的妖魔是什么卷雕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任节猿,我火速辦了婚禮,結(jié)果婚禮上漫雕,老公的妹妹穿的比我還像新娘滨嘱。我一直安慰自己,他們只是感情好浸间,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布太雨。 她就那樣靜靜地躺著,像睡著了一般魁蒜。 火紅的嫁衣襯著肌膚如雪囊扳。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,268評(píng)論 1 309
  • 那天梅惯,我揣著相機(jī)與錄音宪拥,去河邊找鬼仿野。 笑死铣减,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的脚作。 我是一名探鬼主播葫哗,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼球涛!你這毒婦竟也來(lái)了劣针?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤亿扁,失蹤者是張志新(化名)和其女友劉穎捺典,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體从祝,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡襟己,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了牍陌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片擎浴。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖毒涧,靈堂內(nèi)的尸體忽然破棺而出贮预,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布仿吞,位于F島的核電站滑频,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏唤冈。R本人自食惡果不足惜误趴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望务傲。 院中可真熱鬧凉当,春花似錦、人聲如沸售葡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挟伙。三九已至楼雹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尖阔,已是汗流浹背贮缅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留介却,地道東北人谴供。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像齿坷,于是被迫代替她去往敵國(guó)和親桂肌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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