正則表達(dá)式之入門

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

正則表達(dá)式是用于匹配字符串中字符組合的模式。簡(jiǎn)單來說另锋,用一種描述性語言去規(guī)定字符串的一種規(guī)則滞项,如果符合,就匹配了夭坪,否則就是不匹配蓖扑。

定義總是很枯燥不直觀,我們來舉個(gè)例子吧台舱。假如你想從"hi my friend"里找出hi單詞律杠,我們定義正則表達(dá)式:/hi/,比如你想匹配三位數(shù)字 123竞惋,235等柜去,你可以定義表達(dá)式/\d\d\d/,這里的\d我們稱為元字符,它含義是匹配一個(gè)數(shù)字字符拆宛,那這里是3個(gè)\d所以就可以匹配3個(gè)數(shù)字嗓奢,是不是很簡(jiǎn)單啊。

  • \d{3}表示匹配3個(gè)數(shù)字浑厚,例如'010'股耽;

  • \d{3,8}表示3-8個(gè)數(shù)字,例如'1234567'钳幅。

  • '00\d'可以匹配'007'物蝙,但無法匹配'00A';

這里的{}也是元字符敢艰,后面會(huì)介紹诬乞。

正則表達(dá)式基本語法

既然是一種描述性語言,那么就有自己特殊的語法钠导,所以需要大致記憶一下震嫉。當(dāng)然使用的多了,自然就熟悉了牡属。

元字符

具有特殊意義的正則表達(dá)式票堵,這樣可以更好描述需要匹配的字符串。

上面介紹過\d匹配一個(gè)數(shù)字字符逮栅,還有\w匹配一個(gè)單字字符(字母悴势、數(shù)字或者下劃線),\s匹配任意的空白符.

Markdown

.(小數(shù)點(diǎn))匹配除換行符之外的任何單個(gè)字符窗宇。
例如.b,就會(huì)匹配“bcd abc”中的ab,而不會(huì)匹配bc

\b\w{6}\b 匹配6個(gè)字符的單詞,{6}重復(fù)6次

^$都表示匹配一個(gè)位置瞳浦,^表示字符串開頭位置,$表示字符串結(jié)尾废士,例如我們匹配QQ號(hào)^\d{5,12}$,{5,12}重復(fù)5到12次叫潦,因?yàn)榍昂笃ヅ湮恢茫员仨気斎?到12位數(shù)字才能匹配官硝。

限定符

表示前面正則字符重復(fù)的次數(shù)

Markdown

例如:

bc*匹配 “bc”或“bcccccccccccccc”

a+/匹配了在 "candy" 中的 'a'矗蕊,和在 "caaaaaaandy" 中所有的 'a'

e?le? 匹配 "angel" 中的 'el',和 "angle" 中的 'le' 以及"oslo' 中的'l'氢架。

定位符

定位符用來描述字符串或單詞的邊界

Markdown

例如你要尋找字符串中hi傻咖,但是如果沒有設(shè)置單詞邊界,就有可能匹配出him,history,high,但是使用\bhi\b就只會(huì)匹配hi單詞岖研。

而/B其實(shí)是\b的取反卿操,oo\B可以匹配“foot”里的oo

字符轉(zhuǎn)義

如果你想查找本身具有特殊意義的元字符,如果直接使用就會(huì)產(chǎn)生問題孙援,這時(shí)你就得使用\來取消這些字符的特殊意義害淤。

因此,你應(yīng)該使用\.\*拓售。當(dāng)然窥摄,要查找\本身,你也得用\\.

字符類

有的時(shí)候我只是想找元音字母a,e,i,o,u础淤,其他字母不需要怎么辦?很明顯\w不適合的崭放。

那我們應(yīng)該自定義自己需要的字符集[a,e,i,o,u], 其實(shí)\d等于[0-9],而\w等于[a-z0-9A-Z_]

分枝條件

x|y
你可以理解為邏輯運(yùn)算里“或”

例如:
green|red匹配“green apple”中的‘green’和“red apple”中的‘red’

分組

我們可以重復(fù)單個(gè)字符多次,但是怎么可以重復(fù)多個(gè)字符多次呢鸽凶?币砂?你可以用小括號(hào)()來指定子表達(dá)式(也叫做分組),然后你就可以指定這個(gè)子表達(dá)式的重復(fù)次數(shù)了

模式 (foo) (bar) \1 \2 中的 '(foo)' 和 '(bar)' 匹配并記住字符串 "foo bar foo bar" 中前兩個(gè)單詞,每個(gè)小括號(hào)表示一個(gè)分組玻侥,1和2是組號(hào)而\1表示第一個(gè)分組匹配道伟。

例如:\b(\w+)\b\s+\1\b可以用來匹配重復(fù)的單詞,像go go, 或者kitty kitty

貪婪與懶惰

正則表達(dá)式默認(rèn)是盡可能匹配多的字符使碾,以這個(gè)表達(dá)式為例:a.*b,這樣蜜徽,它將會(huì)匹配最長(zhǎng)的以a開始,以b結(jié)束的字符串票摇。如果用它來搜索aabab的話拘鞋,它會(huì)匹配整個(gè)字符串aabab。這被稱為貪婪匹配矢门。

但是很明顯有時(shí)候我們需要盡可能匹配少的字符盆色,那我們可以加限定符?,
a.*?b,這樣如果用它來搜索aabab的話灰蛙,它會(huì)匹配整個(gè)字符串aabab

Markdown

標(biāo)志

正則表達(dá)式有四個(gè)可選參數(shù)進(jìn)行全局和不分大小寫搜索。這些參數(shù)既可以單獨(dú)使用也可以一起使用在任何順序和包含正則表達(dá)式的部分中隔躲。

Markdown

使用正則表達(dá)式

創(chuàng)建一個(gè)正則表達(dá)式

  • 正則表達(dá)式字面量
/*
   /pattern/flags
*/

const regex = /ab+c/;

const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;
  • 調(diào)用RegExp對(duì)象的構(gòu)造函數(shù)
/*
    new RegExp(pattern [, flags])
*/

let regex = new RegExp("ab+c");

let regex = new RegExp(/^[a-zA-Z]+[0-9]*\W?_$, "gi");

let regex = new RegExp("^[a-zA-Z]+[0-9]*\W?_$", "gi");

使用正則表達(dá)式的方法

正則表達(dá)式可以被用于RegExp的exec和test方法以及 String的match摩梧、replace、search和split方法宣旱。

Markdown
Markdown

個(gè)人水平有限仅父,如有錯(cuò)誤,還望指正浑吟,感激不盡s舷恕!组力!


參考鏈接

正則表達(dá)式

正則表達(dá)式30分鐘入門教程

正則表達(dá)式 - 教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末省容,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子燎字,更是在濱河造成了極大的恐慌腥椒,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件候衍,死亡現(xiàn)場(chǎng)離奇詭異寞酿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)脱柱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門伐弹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人榨为,你說我怎么就攤上這事惨好。” “怎么了随闺?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵日川,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我矩乐,道長(zhǎng)龄句,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任散罕,我火速辦了婚禮分歇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘欧漱。我一直安慰自己职抡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布误甚。 她就那樣靜靜地躺著缚甩,像睡著了一般谱净。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上擅威,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天壕探,我揣著相機(jī)與錄音,去河邊找鬼郊丛。 笑死李请,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宾袜。 我是一名探鬼主播捻艳,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼驾窟,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼庆猫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绅络,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤月培,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后恩急,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杉畜,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年衷恭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了此叠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡随珠,死狀恐怖灭袁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窗看,我是刑警寧澤茸歧,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站显沈,受9級(jí)特大地震影響软瞎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拉讯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一涤浇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魔慷,春花似錦芙代、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谤逼。三九已至锐锣,卻和暖如春玖姑,著一層夾襖步出監(jiān)牢的瞬間斧拍,已是汗流浹背井濒。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工婉弹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留片挂,地道東北人幻林。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像音念,于是被迫代替她去往敵國(guó)和親沪饺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

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