正則表達(dá)式學(xué)習(xí)(js)
概覽
先拿數(shù)字舉例
符號(hào) | 含義 |
---|---|
\d | 數(shù)字 |
\d? | 0個(gè)或1個(gè)數(shù)字 |
\d+ | 1個(gè)或多個(gè)數(shù)字 |
\d* | 0個(gè)或多個(gè)數(shù)字 |
\d{3} | 3個(gè)數(shù)字 |
\d{3,5} | 3個(gè)到5個(gè)數(shù)字 |
幾個(gè)常用的例子
-
單詞邊界\b
比如我們就像匹配單詞
is
,像qishi
這樣的不要匹配蚀瘸,我們就需要\bis\b
-
點(diǎn).表示任意字符
如果我們就需要匹配點(diǎn).,那我們就需要轉(zhuǎn)義
\.
-
匹配
//
網(wǎng)址中經(jīng)常有
//
,要匹配這個(gè),也需要轉(zhuǎn)義\/\/
-
分組()
分組之后调塌,我們可以提取其中的內(nèi)容
-
或者[]
在匹配日期中,
[-/]
,就可以要么匹配-
,要么匹配/
-
開頭、結(jié)尾
^表示以什么開始碳竟,$表示以什么結(jié)束
正則對(duì)象
創(chuàng)建一個(gè)正則對(duì)象
var reg = new RegExp('\\bis\\b','g')
\\
空另,第一個(gè)是為了轉(zhuǎn)義,第二個(gè)是配合后面的\b
修飾符
- g: global 表示全文搜索
- i: ignore case 忽略大小寫腋寨。默認(rèn)大小寫敏感
- m:multiple lines 多行搜索
多行匹配就是讓后面的行同樣適用于第一行的規(guī)則聪铺。
沒加換行修飾符
第二行,第三行的都沒有匹配到萄窜。
如果我們加上換行修飾符
元字符
正則表達(dá)式由兩種基本字符組成铃剔,一類是原義文本字符,寫什么就匹配什么查刻,我們看到的就是要匹配的键兜。第二類就是元字符,元字符就是在正則表達(dá)式中有特殊含義的非字母字符穗泵。
字符類
我們使用[]
構(gòu)造了一類字符普气,這一類字符中,可以是abc中的任意一個(gè)佃延。
字符類取反
范圍類
如果我們要需要一個(gè)類现诀,包括數(shù)字從5到9,我們需要這樣[5 6 7 8 9]
,如果數(shù)字多的話夷磕,會(huì)很麻煩
所以就需要范圍類了
連寫
[a-zA-Z],就把大小寫都包括了。
如果我們不光包括大小寫仔沿,還需要包括-
[a-zA-Z-]坐桩,后面加一個(gè)-
就可以了。
js預(yù)定義類和邊界
上一節(jié)中于未,看到我們可以自定義類撕攒,這樣已經(jīng)方便了我們書寫,但是還不夠烘浦,為此抖坪,正則表達(dá)式還給我們提供了預(yù)定義類來匹配常見的字符類。
我們可以自己構(gòu)造:
ab[0-9][^\r\n]
也可以使用正則的預(yù)定義類
ab\d.
邊界
舉例
量詞
我們希望匹配一個(gè)連續(xù)出現(xiàn)20次的數(shù)字的字符串
好麻煩
貪婪模式和非貪婪模式
這個(gè)會(huì)匹配多少闷叉?
默認(rèn)是貪婪模式擦俐,會(huì)都匹配。
如果我們想讓它盡可能少的匹配握侧,我們就設(shè)置為非貪婪模式蚯瞧。
舉例:
分組
我們有這樣的場景,匹配字符串Byron
出現(xiàn)三次的場景品擎。
學(xué)習(xí)了量詞之后埋合,我們可以這樣:Byron{3}
但是這并不是我們需要的,因?yàn)樗淼氖?code>n出現(xiàn)三次萄传。
或
上面的例子甚颂,如果我們只是想把或作用on
或Ca
,我們可以這樣
反向引用
場景:
不光是
-
變成了/
,日期的順序也變了秀菱。
我們要替換的內(nèi)容還在字符串本身里面振诬,就相當(dāng)于變量的概念了。
note:如果沒有分組的話衍菱,$就表示原義了赶么。
忽略分組
前瞻和后顧
舉例
這里的(?=\d)
不是正則部分,它是類型斷言部分脊串。