JavaScript - 正則表達(dá)式

定義

正則表達(dá)式就是用一個(gè)"字符串"來(lái)描述一個(gè)特征,然后區(qū)驗(yàn)證另一個(gè)"字符串"是否符合這個(gè)特征

用途

  1. 驗(yàn)證字符串是否符合指定特征,比如驗(yàn)證郵件地址
  2. 從一個(gè)長(zhǎng)文本中查找指定字符串,使用更加靈活
  3. 替換指定文本

普通規(guī)則

表達(dá)式 作用
a 匹配單個(gè)字符a
2 匹配單個(gè)字符2
\r, \n 匹配回車, 換行符
\t 匹配制表符 TAB
\ 匹配''本身
^ 匹配'^'本身
$ 匹配'$'本身
. 匹配'.'本身
\d 匹配任意一個(gè)0-9的數(shù)字
\w 匹配任意一個(gè)字母或數(shù)字或下劃線,也就是A-Z, a-z, 0-9, _ 中任意一個(gè)
\s 匹配包括空格、制表符、換頁(yè)符等空白字符的任意一個(gè)
. 匹配除換行符\n以外的任意一個(gè)字符(包括數(shù)字)
[ab5@] 匹配'a' 或 'b' 或 '5' 或 '@'中的任意一個(gè)
[^abc] 匹配'a' 'b' 'c' 之外的任意一個(gè)字符
[a-z] 匹配'a' 到 'z' 的任意一個(gè)字符
[A-Z] 匹配'A' 到 'Z' 的任意一個(gè)字符
[A-Z0-3] 匹配'A' 到 'Z' 以及 0 到 3 的任意一個(gè)字符
[^A-Z0-3] 匹配除'A' 到 'Z' 以及 0 到 3 以外的任意一個(gè)字符
{n} 表達(dá)式重復(fù)n次, 比如 '\w{2}'相當(dāng)于\w\w, 'a{5}'相當(dāng)于aaaaa
{m, n} 表達(dá)式至少重復(fù)m次,最多重復(fù)n次, 比如'ba{1,3}'可以匹配'ba'或'baa'或'baaa'
{m,} 表達(dá)式至少重復(fù)m次,沒(méi)有上限,比如'\w\d{2,}'可以匹配'a12', '_456', 'M1223'等
? 表達(dá)式匹配0次或者1次,相當(dāng)于{0,1},比如'a[cd]?'可以匹配'a', 'ac', 'ad'
+ 表達(dá)式匹配至少1次,相當(dāng)于{1,},比如'a+b'可以匹配'ab', 'aab', 'aaab'等
* 表達(dá)式匹配0次或任意次鬼佣,相當(dāng)于{0,}迅腔,比如'^*b'可以匹配'b', '^b', '^^b'等
^ 從字符串開(kāi)始的地方匹配,不匹配任何字符, 比如'^12'可以匹配'12kp',結(jié)果為'12', 不能匹配'kp12'
$ 從字符串結(jié)束的地方匹配,不匹配任何字符,比如'12$'可以匹配'kp12',結(jié)果為'12',不能匹配'12kp'
\b 匹配一個(gè)單詞邊界,也就是單詞和空格之間的位置,不匹配任何字符,即一邊是屬于\w,另一邊不屬于\w,比如:用'./b.'去匹配"abc_123中文d3=efg漢字%",結(jié)果是'3中', '文', '3=', 'g漢', 又比如用'\bto\b'去匹配'today to too'得到結(jié)果是:'to', 'today'以及'too'中的to并不能被匹配到,因?yàn)閈b要求一邊屬于\w,另一邊不屬于\w,而'today'中的'd'也屬于\w范圍內(nèi)
豎線 左右兩邊表達(dá)式是'或'的關(guān)系,匹配左邊或者右邊
() (1) 在被修飾匹配次數(shù)的時(shí)候,括號(hào)中的表達(dá)式可以作為整體被修飾 (2) 取匹配結(jié)果的時(shí)候,括號(hào)中的表達(dá)式匹配到的內(nèi)容可以被單獨(dú)得到

高級(jí)規(guī)則

  • 貪婪與非貪婪

** 貪婪模式 **

在使用修飾匹配次數(shù)的特殊符號(hào)時(shí),有多種表示方法可以使同一個(gè)表達(dá)式能夠匹配不同的次數(shù),比如: '{m,n}', '{m,}', '?', '*', '+', 具體匹配的次數(shù)隨被匹配字符串而定,這種重復(fù)匹配不定次數(shù)的表達(dá)式在匹配過(guò)程中,總是盡可能多的匹配,比如,針對(duì)文本'dxxxdxxxd',舉例如下:

表達(dá)式 匹配結(jié)果
(d)(\w+) '\w+' 將匹配第一個(gè)'d'之后的所有字符'xxxdxxxd'
(d)(\w+)(\d) '\w+'將匹配第一個(gè)'d'和最后一個(gè)'d'之間的所有字符'xxxdxxx', 雖然'\w+'也能匹配上最后一個(gè)'d',但是為了使整個(gè)表達(dá)式匹配成功,'\w+'可以讓出它本來(lái)能夠匹配的最后一個(gè)'d'

由此可見(jiàn),'+', '*', '{m,n}'等表達(dá)式都是盡可能多的匹配,帶'?'的表達(dá)式在可匹配可不匹配的時(shí)候,也是盡可能的要匹配,這種匹配原則叫做'貪婪'模式

非貪婪模式

在修飾匹配次數(shù)的特殊符號(hào)后再加上一個(gè)'?'號(hào),則可以使匹配次數(shù)不定的表達(dá)式盡可能少的匹配,使可匹配可不匹配的表達(dá)式,盡可能的不匹配,這種匹配原則叫做'非貪婪'模式,也叫做'勉強(qiáng)'模式,如果少匹配就會(huì)導(dǎo)致整個(gè)表達(dá)式匹配失敗的時(shí)候,與貪婪模式類似,非貪婪模式會(huì)最小限度的再匹配一些,以使整個(gè)表達(dá)式匹配成功,舉例如下,針對(duì)文本'dxxxdxxxd'匹配:

表達(dá)式 匹配結(jié)果
(d)(\w+?) '\w+?' 將盡可能少的匹配第一個(gè)'d'之后的字符,'\w+?'匹配結(jié)果是'x'
(d)(\w+?)(\d) 為了讓整個(gè)表達(dá)式匹配成功,'\w+?'不得不匹配'xxx'才可以讓后邊的'd'得到匹配,從而使整個(gè)表達(dá)式匹配成功,因此,'\w+?'匹配結(jié)果是'xxx'
  • 反向引用 \1, \2……
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柜某,隨后出現(xiàn)的幾起案子嗽元,更是在濱河造成了極大的恐慌敛纲,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剂癌,死亡現(xiàn)場(chǎng)離奇詭異淤翔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)佩谷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門(mén)旁壮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人琳要,你說(shuō)我怎么就攤上這事寡具。” “怎么了稚补?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵童叠,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我课幕,道長(zhǎng)厦坛,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任乍惊,我火速辦了婚禮杜秸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘润绎。我一直安慰自己撬碟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布莉撇。 她就那樣靜靜地躺著呢蛤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棍郎。 梳的紋絲不亂的頭發(fā)上其障,一...
    開(kāi)封第一講書(shū)人閱讀 52,821評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音涂佃,去河邊找鬼励翼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛辜荠,可吹牛的內(nèi)容都是我干的汽抚。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼侨拦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼殊橙!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤膨蛮,失蹤者是張志新(化名)和其女友劉穎叠纹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體敞葛,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡誉察,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惹谐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片持偏。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖氨肌,靈堂內(nèi)的尸體忽然破棺而出鸿秆,到底是詐尸還是另有隱情,我是刑警寧澤怎囚,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布卿叽,位于F島的核電站,受9級(jí)特大地震影響恳守,放射性物質(zhì)發(fā)生泄漏考婴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一催烘、第九天 我趴在偏房一處隱蔽的房頂上張望沥阱。 院中可真熱鬧,春花似錦伊群、人聲如沸考杉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奔则。三九已至,卻和暖如春蔽午,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酬蹋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工及老, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人范抓。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓骄恶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親匕垫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子僧鲁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

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