正則表達(dá)式

一、字符組

1.1

排除型
[^0-9] 表示 “0-9之外的字符“^”緊跟“[”表示“除什么什么之外”
排除型字符組只能排除單個(gè)字符

1.2 字符組簡(jiǎn)記

簡(jiǎn)記 對(duì)應(yīng)字符 說明
\d [0-9] digit
\w [0-9a-zA-Z_] word
\s [\t\r\n\v\f] \t制表符 \r回車符 \n換行符
\D [^\d] 與\d相反
\W [^\w] 與\w相反
\S [^\s] 與\s相反
[\s\S] [\d\D] [\s\S] 匹配任意字符

二、量詞

2.1 一般形式

量詞 說明
{n} 之前的元素必須出現(xiàn)n次
{m,n} 之前的元素最少出現(xiàn)m次刀疙,最多出現(xiàn)n次
{m,} 最少出現(xiàn)m次精盅,沒有上限
{0,n} 0到n次

2.2 量詞簡(jiǎn)記法

常用量詞 {m,n}等價(jià)方式
* {0,}
+ {1,}
{0,1}

2.3 點(diǎn)號(hào)

點(diǎn)號(hào)匹配任意字符供置,其中\(zhòng)n不能匹配

2.4 回溯

"[^"]"主要為了排除"hello world" world"這種情況况凉,
匹配優(yōu)先量詞
在拿不定是否要匹配的時(shí)候谚鄙,優(yōu)先嘗試匹配,并且記下這個(gè)狀態(tài)刁绒,以備將來后悔闷营。
" .
" 在匹配"hello world" second"時(shí),會(huì)匹配第一個(gè)雙引號(hào)之后的所有字符知市,再進(jìn)行回溯傻盟,表達(dá)式中的"匹配了字符串的字符"速蕊,整個(gè)匹配宣告完畢。
————————————————————
. 優(yōu)先匹配莫杈,知道匹配最后一個(gè)字符互例,發(fā)現(xiàn)都是符合 . 這個(gè)狀態(tài)的奢入。
開始回溯筝闹。
最后一個(gè)字符符合,結(jié)束腥光。

2.5 忽略優(yōu)先量詞

<script type="text/javascript">
    alert('hello world');
</script>
<br/>
<script type="text/javascript">
    alert("I think you're right");
</script>

匹配:

<script type="text/javascript">[/s/S]*</script>

匹配優(yōu)先量詞會(huì)優(yōu)先匹配最后一個(gè)字符关顷,這時(shí)候已經(jīng)沒有匹配的字符了,但正則表達(dá)式中的”</script>“還沒有匹配到武福,所以只能查詢之前保存?zhèn)溆玫臓顟B(tài)议双,看看能不能回退幾步,照顧“</script>”的匹配捉片。查詢到最近保存的狀態(tài)是:【“</script>”也可能是[/s/S]不應(yīng)該匹配的】平痰。于是讓[/s/S]反悔對(duì)”</script>“的匹配,所以整個(gè)匹配過程宣告成功伍纫。
匹配的結(jié)果是:

    alert('hello world');
</script>
<br/>
<script type="text/javascript">
    alert("I think you're right");

這樣和我們的預(yù)期并不相同宗雇。
我們需要采用忽略優(yōu)先量詞
如果不確定要匹配,忽略優(yōu)先量詞會(huì)選擇“不匹配”的狀態(tài)莹规,再嘗試表達(dá)式中之后的元素赔蒲,如果嘗試失敗,再回溯良漱,選擇之前保存的“匹配”的狀態(tài)舞虱。
也就是,當(dāng)遇到”<“字符時(shí)母市,[/s/S]選擇不匹配矾兜,嘗試將“</script>”與表達(dá)式中的“</script>”比較,比較成功患久,返回成功的字符串焕刮。
正確的寫法是

<script type="text/javascript">[/s/S]*?</script>

*與*?的區(qū)別在于,在實(shí)際匹配的過程中墙杯,遇到[/s/S]能匹配的字符配并,先嘗試忽略,如果后面的元素不能匹配(即“</script>”)高镐,再嘗試匹配溉旋。直到匹配到第一個(gè)出現(xiàn)的“</script>”為止。

匹配優(yōu)先量詞 和 忽略優(yōu)先量詞相比嫉髓,匹配優(yōu)先量詞效率更高观腊。

2.6 轉(zhuǎn)義

一般量詞的轉(zhuǎn)義邑闲,例如{m,n},如果希望匹配{m,n}梧油,直接加上{m,n}即可
*? 的轉(zhuǎn)義 是 /*/?

三苫耸、括號(hào)

3.1 分組

身份證號(hào)碼
15位都是數(shù)字&首字母不能為0
18位 前17位是數(shù)字&首字母不能為0,末位可能是數(shù)字|字母x

說明 對(duì)應(yīng)字符
首位是數(shù)字儡陨,不能為0 [1-9]
去除首末2位褪子,剩下13位或16位,都是數(shù)字 \d{13, 16}
末位可能是數(shù)字骗村,也可能是x [0-9x]

[1-9]\d{13, 16}[0-9x]

但這樣寫是不對(duì)的嫌褪,不能匹配。
我們可以采用括號(hào)的方式改變量詞的作用元素

[1-9]\d{14}(\d{2}[0-9x])?

3.2 多選結(jié)構(gòu)

結(jié)構(gòu)形式為:

(...|...)

上面的身份證號(hào)可以表示為:

([1-9]\d{14}|[1-9]\d{16}[0-9x])

匹配0~255之間的數(shù)字

((00)?[0-9]|0?[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])

手機(jī)號(hào)

(0|\+86)?(13[0-9]|15[0-356]|18[025-9])\d{8}

四胚股、斷言

4.1 單詞邊界

說明:

表達(dá)式 說明
\brow\b 只能是單詞row
\brow 例如row笼痛、rowdy等
row\b 例如row、tomorrow等

用\b\w+\b來匹配一個(gè)句子中的單詞琅拌。

4.2

^ 開始
$ 結(jié)束

4.3 環(huán)視

名字 記法 判斷方向 結(jié)構(gòu)內(nèi)表達(dá)式匹配成功的返回值
肯定順序環(huán)視 (?=...) 向右 True
否定順序環(huán)視 (?!...) 向右 False
肯定逆序環(huán)視 (?<=...) 向左 True
否定逆序環(huán)視 (?<!...) 向左 False

舉個(gè)例子:
<(?!/) 表示<右側(cè)不能出現(xiàn)/缨伊,它和<[^/]類似,但卻不同进宝。
<(?!/)匹配的僅僅只有<
<[^/]匹配<及其后面一個(gè)字符
環(huán)視最大的特點(diǎn)是“匹配完成之后還停留在原地”

格式化數(shù)字

(?<=\d)(?=(\d{3})+(?!\d))
'123456'.replace(/(?<=\d)(?=(\d{3})+(?!\d))/u, ',')

分析:


字符串可拆分為(?<=\d)和(?=(\d{3})+(?!\d))
(?<=\d)表示 當(dāng)前字符左側(cè)必須要出現(xiàn)數(shù)字
(?=(\d{3})+(?!\d))表示字符右側(cè)必須要出現(xiàn)(\d{3})+(?!\d)


(\d{3})+(?!\d)可拆分
(\d{3})+表示三個(gè)連續(xù)數(shù)字至少出現(xiàn)1次
(?!\d)表示右側(cè)必定不能出現(xiàn)數(shù)字

五刻坊、匹配模式

5.1

表達(dá)式 說明
\regex\i 不區(qū)分大小寫
dotALL(點(diǎn)號(hào)通配) 單行模式
\regex\m 多行模式
\regex\x 注釋模式
\regex\u 表示按unicode(utf-8)匹配(主要針對(duì)多字節(jié)比如漢字)
\regex\s 表示將字符串視為單行來匹配

六、捕獲分組的引用

6.1

如果要在正則表達(dá)式內(nèi)部引用捕獲分組即彪,則應(yīng)當(dāng)使用\num記法紧唱,其中num為對(duì)應(yīng)捕獲分組的編號(hào)

/^([a-z])\1$/u.test("aa") //true

如果要在replacement字符串中引用捕獲分組,則應(yīng)當(dāng)使用$num記法隶校。

"2019-10-28".replace(/(\d{4})-(\d{2})-(\d{2})/u, "$2/$3/$1") //10/28/2019

如需表示$符號(hào)漏益,必須轉(zhuǎn)義為$$

"the price is 12.99".replace(/(\d+\.\d{0,2})/u, "$$$1"); //the price is $12.99

6.2 命名分組

用法:

(?<name>regex)

栗子:

pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/u;
result = pattern.exec("2019-10-30");
結(jié)果

6.3(與6.1對(duì)應(yīng))

在正則表達(dá)式內(nèi)部引用捕獲分組,應(yīng)當(dāng)使用\k<name>記法

/^(?<char>[a-z])\k<char>$/u.test('aa');
regex = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/u;
replacement = "$<month>/$<day>/$<year>"
"2019-10-30".replace(regex, replacement); //"10/30/2019"
"the price is 12.99".replace(/(?<money>\d+\.\d{0,2})/u, "$$$<money>");

七深胳、

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绰疤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舞终,更是在濱河造成了極大的恐慌轻庆,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敛劝,死亡現(xiàn)場(chǎng)離奇詭異余爆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)夸盟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蛾方,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事桩砰⊥卮海” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵亚隅,是天一觀的道長(zhǎng)硼莽。 經(jīng)常有香客問我,道長(zhǎng)煮纵,這世上最難降的妖魔是什么懂鸵? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮醉途,結(jié)果婚禮上矾瑰,老公的妹妹穿的比我還像新娘砖茸。我一直安慰自己隘擎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布凉夯。 她就那樣靜靜地躺著货葬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪劲够。 梳的紋絲不亂的頭發(fā)上震桶,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音征绎,去河邊找鬼蹲姐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛人柿,可吹牛的內(nèi)容都是我干的柴墩。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼凫岖,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼江咳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哥放,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤歼指,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后甥雕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踩身,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年社露,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挟阻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赁濒,靈堂內(nèi)的尸體忽然破棺而出轨奄,到底是詐尸還是另有隱情,我是刑警寧澤拒炎,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布挪拟,位于F島的核電站,受9級(jí)特大地震影響击你,放射性物質(zhì)發(fā)生泄漏玉组。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一丁侄、第九天 我趴在偏房一處隱蔽的房頂上張望惯雳。 院中可真熱鬧,春花似錦鸿摇、人聲如沸石景。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽潮孽。三九已至,卻和暖如春筷黔,著一層夾襖步出監(jiān)牢的瞬間往史,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工佛舱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留椎例,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓请祖,卻偏偏與公主長(zhǎng)得像订歪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子损拢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361