JavaScript正則表達(dá)式

一直對(duì)正則表達(dá)式這塊比較欠缺删壮,經(jīng)常看見很多地方在用兑牡,比如匹配路由央碟,匹配電話號(hào)碼,匹配鏈接等等发绢。不是很明白其中一些符號(hào)的意思硬耍,所以看了很多的文章,最后從看的文章中摘錄一些重要的過來边酒,并做一些總結(jié)经柴。

定義

  1. 構(gòu)造函數(shù)
var reg = new RegExp('<%string%>', 'g');
  1. 字面量
var reg = /<%string%>/g
  • g:global,全文搜索墩朦,默認(rèn)搜索到第一個(gè)結(jié)果就停止
  • i:ignore case坯认,忽略大小寫,默認(rèn)大小寫敏感
  • m: multiple lines氓涣,多行搜索(更改^和$的含義牛哺,使它們分別在任意一行對(duì)待行首和行尾匹配,而不僅僅在整個(gè)字符串的開頭和結(jié)尾匹配)

元字符

正則表達(dá)式讓人望而卻步的一個(gè)重要原因就是其轉(zhuǎn)義字符太多了劳吠,組合非常之多引润,但是正則表達(dá)式的元字符(在正則表達(dá)式中具有特殊意義的專用字符,可以用來規(guī)定其前導(dǎo)字符)并不多

元字符:([{^$|)?*+.

并不是每個(gè)元字符都有其特定意義痒玩,在不同的組合中元字符有不同的意義淳附,分類看一下

預(yù)定義特殊字符

字符 含義
\t 水平制表符
\r 回車符
\n 換行符
\f 換頁符
\cX 與X對(duì)應(yīng)的控制字符(Ctrl + X)
\v 垂直制表符
\0 空字符

字符類

一般情況下正則表達(dá)式一個(gè)字符(轉(zhuǎn)義字符算一個(gè))對(duì)應(yīng)字符串一個(gè)字符,比如ab\t

但是我們可以使用元字符[]來構(gòu)建一個(gè)簡(jiǎn)單的類蠢古,所謂類是指奴曙,符合某些特征的對(duì)象,是一個(gè)泛指草讶,而不是特指某個(gè)字符洽糟,我們可以使用表達(dá)式[abc]把字符a或b或c歸為一類,表達(dá)式可以匹配這類的字符

元字符[]組合可以創(chuàng)建一個(gè)類堕战,我們還可以使用元字符創(chuàng)建反向類/負(fù)向類坤溃,反向類的意思是不屬于XXX類的內(nèi)容,表達(dá)式[abc]表示不是字符a或b或c的內(nèi)容

范圍類

按照上面的說明要是我們希望匹配單個(gè)數(shù)字那么表達(dá)式是這樣的[0123456789]

如果是字母那怎么辦践啄。浇雹。。屿讽,好麻煩昭灵,正則表達(dá)式還提供了范圍類,我們可以使用x-y來連接兩個(gè)字符表示從x到y(tǒng)的任意字符伐谈,這是個(gè)閉區(qū)間烂完,也就是說包含x和y本身,這樣匹配小寫字母就很簡(jiǎn)單了[a-z]

要是想匹配所有字母呢诵棵?在[]組成的類內(nèi)部是可以連寫得抠蚣,我們還可以這樣寫[a-zA-Z]

預(yù)定義類

剛才使用正則我們創(chuàng)建了幾個(gè)類,來表示數(shù)字履澳,字母等嘶窄,但這樣寫也很麻煩怀跛,正則表達(dá)式為我們提供了幾個(gè)常用的預(yù)定義類來匹配常見的字符

字符 等價(jià)類 含義
. [^\n\r] 除了回車符和換行符之外的所有字符
\d [0-9] 數(shù)字字符
\D [^0-9] 非數(shù)字字符
\s [ \t\n\x0B\f\r] 空白符
\S [^ \t\n\x0B\f\r] 非空白符
\w [a-zA-Z_0-9] 單詞字符(字母、數(shù)字柄冲、下劃線)
\W [^a-zA-Z_0-9] 非單詞字符

有了這些預(yù)定義類吻谋,寫一些正則就很方便了,比如我們希望匹配一個(gè)ab+數(shù)字+任意字符的字符串现横,就可以這樣寫了ab\d

邊界

正則表達(dá)式還提供了幾個(gè)常用的邊界匹配字符

字符 含義
^ 以xx開頭
$ 以xx結(jié)尾
\b 單詞邊界漓拾,指[a-zA-Z_0-9]之外的字符
\B 非單詞邊界

看個(gè)不負(fù)責(zé)任的郵箱正則匹配\w+@\w+\.(com)$

量詞

之前我們介紹的方法都是一一匹配的,如果我們希望匹配一個(gè)連續(xù)出現(xiàn)20次數(shù)字的字符串戒祠,難道我們需要寫成 這樣\d\d\d\d...

為此正則表達(dá)式引入了一些量詞

字符 含義
骇两? 出現(xiàn)零次或一次(最多出現(xiàn)一次)
出現(xiàn)一次或多次(至少出現(xiàn)一次)
* 出現(xiàn)零次或多次(任意次)
{n} 出現(xiàn)n次
{n,m} 出現(xiàn)n到m次
{n,} 至少出現(xiàn)n次

貪婪模式與非貪婪模式

看了上面介紹的量詞姜盈,也許愛思考的同學(xué)會(huì)想到關(guān)于匹配原則的一些問題低千,比如{3,5}這個(gè)量詞,要是在句子種出現(xiàn)了十次馏颂,那么他是每次匹配三個(gè)還是五個(gè)栋操,反正3、4饱亮、5都滿足3~5的條件矾芙,量詞在默認(rèn)下是盡可能多的匹配的,也就是大家常說的貪婪模式
`'123456789'.match(/\d{3,5}/g); //["12345", "6789"] `

既然有貪婪模式近上,那么肯定會(huì)有非貪婪模式剔宪,讓正則表達(dá)式盡可能少的匹配,也就是說一旦成功匹配不不再繼續(xù)嘗試壹无,做法很簡(jiǎn)單葱绒,在量詞后加上 ? 即可
`'123456789'.match(/\d{3,5}?/g); //["123", "456", "789"]`

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市斗锭,隨后出現(xiàn)的幾起案子地淀,更是在濱河造成了極大的恐慌,老刑警劉巖岖是,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帮毁,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡豺撑,警方通過查閱死者的電腦和手機(jī)烈疚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聪轿,“玉大人爷肝,你說我怎么就攤上這事。” “怎么了灯抛?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵金赦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我对嚼,道長(zhǎng)素邪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任猪半,我火速辦了婚禮,結(jié)果婚禮上偷线,老公的妹妹穿的比我還像新娘磨确。我一直安慰自己,他們只是感情好声邦,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布乏奥。 她就那樣靜靜地躺著,像睡著了一般亥曹。 火紅的嫁衣襯著肌膚如雪邓了。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天媳瞪,我揣著相機(jī)與錄音骗炉,去河邊找鬼。 笑死蛇受,一個(gè)胖子當(dāng)著我的面吹牛句葵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兢仰,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼乍丈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了把将?” 一聲冷哼從身側(cè)響起轻专,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎察蹲,沒想到半個(gè)月后请垛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洽议,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年叼屠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绞铃。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡镜雨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荚坞,我是刑警寧澤挑宠,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站颓影,受9級(jí)特大地震影響各淀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜诡挂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一碎浇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧璃俗,春花似錦奴璃、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至唱星,卻和暖如春雳旅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背间聊。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工攒盈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哎榴。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓沦童,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親叹话。 傳聞我的和親對(duì)象是個(gè)殘疾皇子偷遗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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