正則表達(dá)式

元字符:在正則表達(dá)式中有特殊語(yǔ)義的字符
常用元字符 含義
. 匹配除換行符以外的任何字符
\w 匹配字母刁笙、數(shù)字、下劃線
\W 匹配不是字母、數(shù)字拍鲤、下劃線的字符
\d 匹配數(shù)字, 相當(dāng)于[0-9]
\D 匹配不是數(shù)字的字符
\s 匹配任何不可見(jiàn)字符剩檀,包括空格憋沿、制表符、換行符等
\S 匹配任意可見(jiàn)字符
\b 匹配一個(gè)詞的邊界沪猴。一個(gè)詞的邊界就是沒(méi)有其他“字”字符在其前面或后面的位置
\B 匹配不是詞的邊界
^ 匹配字符串的開(kāi)始位置
$ 匹配字符串的結(jié)束位置

這里的\w和\W以及\d和\D等都是互斥等辐啄,組合起來(lái)就是字符等全集,但跟 . 不相等运嗜,因?yàn)?. 不包括換行符壶辜。

字符集:使用[] 括起字符串來(lái)創(chuàng)建字符集,可以匹配[]里面的任意字符

一些特殊符號(hào)在字符集中是沒(méi)有特殊語(yǔ)義的担租,不需要用轉(zhuǎn)義符轉(zhuǎn)義砸民,例如:
[.*+?^=!:${}()|[]/\],但如果不在字符集中是需要轉(zhuǎn)義的翩活,比如 /./表示匹配除換行符之外的任何字符 , 如果想匹配 . 字符本身阱洪,就需要:/\./.
一些元字符也可以用字符集來(lái)表示,比如:\d == [0-9] \w == [0-9A-Za-z_].
'-' 短橫線在字符集中表示區(qū)間菠镇,如果只有 ‘-’ 一個(gè)字符冗荸,就可以匹配'-' 不需要轉(zhuǎn)義
/[-]/.test('-'); // true
/[-a]/.test('-') // true
/[a-]/.test('-') // true

分支: 其實(shí)就是表示或的概念

(aa|ba|ca): 匹配aa, ba或ca,這個(gè)也可以用字符集表示:/[abc]a/, 這種特殊情況可以這樣表示利耍,但是像(aa|bb|cc)這種就不可以了

量詞:表示字符重復(fù)次數(shù)
常用元字符 含義
* 重復(fù)任意次蚌本,相當(dāng)于{0,}
? 重復(fù)0次或1次盔粹,相當(dāng)于{0,1}
+ 重復(fù)一次或更多次,相當(dāng)于{1,}
{n} 重復(fù)n次
{n,} 重復(fù)n次或更多次
{n,m} 重復(fù)n到m次
分組和引用

分組:使用()將字符作為一個(gè)最小單元程癌,并且可以記住匹配項(xiàng)
引用:可以使用反斜杠‘\’來(lái)引用分組的表達(dá)式舷嗡,從最外層的括號(hào)開(kāi)始計(jì)算分組,依次為分組一嵌莉、分組二...

分組1.png

上面圖片已經(jīng)確定了分組进萄,接下來(lái)我們就可以使用引用了
/(\d{4})-(\d{2})-\2/:\2 就表示引用 (\d{2}) 的內(nèi)容,和 (\d{2}) 的內(nèi)容相同
/(\d{4})-(\d{2})-\2/.test('2018-07-07') // true
/(\d{4})-(\d{2})-\2/.test('2018-07-09') // false

\1, \2, \n 這種是用在正則表達(dá)式的匹配環(huán)節(jié)锐峭,但是這種123的記法不方便中鼠,你還得一個(gè)個(gè)去數(shù)。有一種給分組命名的方法可以方便記憶: ?<name>沿癞,訪問(wèn)捕獲的組可以使用 \k<name>援雇。在正則表達(dá)式的替換環(huán)節(jié),則要使用像 $1椎扬、$2...$9 這樣的語(yǔ)法惫搏,$& 可以匹配全部?jī)?nèi)容,而不只是分組內(nèi)容蚕涤。

命名.png

groups字段中展示了各個(gè)捕獲組的內(nèi)容筐赔。

/(?<year>\d{4})-(?<month>\d{2})-\k<month>/.test('2018-08-08') // true

零寬斷言:匹配到的內(nèi)容不保存到匹配結(jié)果中去

作用是給指定位置添加一個(gè)限定條件,用來(lái)規(guī)定此位置之前或者之后的字符必須滿足限定條件才能使正則中的子表達(dá)式匹配成功揖铜。

  1. 根據(jù)方向到不同川陆,分為lookahead(向前查找)和lookbehind(向后查找)
  2. 根據(jù)判定原則,分為 肯定和否定
從左到右/pattern的前面位置 從右到左/pattern的后面位置
肯定/正 (?=pattern)(子字符串前面有pattern才會(huì)匹配) (?<=pattern) (子字符串后面有pattern才會(huì)匹配)
否定/負(fù) (?!pattern)(子字符串前面沒(méi)有pattern才會(huì)匹配) (?<!pattern) (子字符串后面沒(méi)有pattern才會(huì)匹配)

向后看是有個(gè)<蛮位,肯定=, 否定!

惰性&貪婪

貪婪模式:在匹配成功的情況下鳞绕,盡可能多的去匹配

比如:/.*bbb/g.test(‘a(chǎn)bbbaabbbaaabbb1234')
*會(huì)先盡可能多的匹配失仁,這里就是匹配全部字符串,然后再查找b们何,如果不符合條件就向前回溯萄焦,匹配'abbbaabbbaaabbb123', 再向后查找b,不滿足繼續(xù)回溯...


貪婪一.png

貪婪二.png
貪婪三.png

惰性模式:在匹配成功的情況下冤竹,盡可能少的去匹配

比如:/.*?bbb/g.test(‘a(chǎn)bbbaabbbaaabbb1234’)
*會(huì)盡量少的匹配拂封,第一次會(huì)匹配0次,然后向后查找b


惰性1.png
惰性兒.png
惰性三.png

到底是使用貪婪模式還是惰性模式要看自己對(duì)所要匹配對(duì)字符串的熟悉程度鹦蠕,對(duì)字符串的特性越熟悉冒签,越容易判定使用哪種模式,自然也能提升性能钟病。
貪婪要不停的回溯萧恕,惰性則是從前往后匹配

修飾符
修飾符 含義
i ignoreCase(忽略大小寫(xiě))
g global(全局)
m multiline(多行)
s dotAll(. 能匹配所有字符)
y sticky(粘連)

m表示匹配多行刚梭,主要是表達(dá)式加^時(shí)會(huì)有差別,每次都從每一行的開(kāi)頭匹配
'1\n2'.match(/^\d/g) // ["1"]
'1\n2'.match(/^\d/mg) // ["1", "2"] 注意要加上g藏雏,匹配全局巡语,不然結(jié)果也只是 1

s: . 表示除換行之外的所有字符盾舌,加上s修飾符就可以表示所有字符
/./.test('\n') // false
/./s.test('\n') // true

使用方法
方法 描述
exec 在字符串中執(zhí)行查找匹配,返回一個(gè)數(shù)組(沒(méi)匹配到返回null)
test 測(cè)試字符串是否匹配衅金,返回true或false
match 在字符串中執(zhí)行查找匹配的String方法,返回?cái)?shù)組或null
search 在字符串中測(cè)試匹配的String方法簿煌,返回匹配到的位置索引或-1
replace 在字符串中執(zhí)行查找匹配的String方法氮唯,并用替換字符串替換掉匹配到的字符串
split 使用正則表達(dá)式或字符串分割字符串,并將分割后的結(jié)果存儲(chǔ)到數(shù)組中的String方法

match和exec的區(qū)別除了一個(gè)是String方法一個(gè)是RegExp方法啦吧,還有就是有g修飾符時(shí)候的表現(xiàn)

  1. 無(wú)子表達(dá)式
    'abbbaabbbaaabbb1234'.match(/ab/g) // ["abbb", "a", "abbb", "a", "a", "abbb"]
    /ab
    /g.exec('abbbaabbbaaabbb1234') // ["abbb", index: 0, input: "abbbaabbbaaabbb1234", groups: undefined] (返回第一個(gè)匹配的字符串內(nèi)容)
  2. 有子表達(dá)式
    'abbbaabbbaaabbb1234'.match(/a(a)/g) // ["a", "aa", "aaa"] (忽略子表達(dá)式您觉,只查找全匹配正則表達(dá)式并返回所有內(nèi)容)
    /a(a
    )/g.exec('abbbaabbbaaabbb1234') // ["a", "", index: 0, input: "abbbaabbbaaabbb1234", groups: undefined]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市授滓,隨后出現(xiàn)的幾起案子琳水,更是在濱河造成了極大的恐慌,老刑警劉巖般堆,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件在孝,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡淮摔,警方通過(guò)查閱死者的電腦和手機(jī)私沮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)和橙,“玉大人仔燕,你說(shuō)我怎么就攤上這事∧д校” “怎么了晰搀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)办斑。 經(jīng)常有香客問(wèn)我外恕,道長(zhǎng),這世上最難降的妖魔是什么乡翅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任鳞疲,我火速辦了婚禮,結(jié)果婚禮上蠕蚜,老公的妹妹穿的比我還像新娘尚洽。我一直安慰自己,他們只是感情好靶累,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布翎朱。 她就那樣靜靜地躺著橄维,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拴曲。 梳的紋絲不亂的頭發(fā)上争舞,一...
    開(kāi)封第一講書(shū)人閱讀 52,166評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音澈灼,去河邊找鬼竞川。 笑死,一個(gè)胖子當(dāng)著我的面吹牛叁熔,可吹牛的內(nèi)容都是我干的委乌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼荣回,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼遭贸!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起心软,我...
    開(kāi)封第一講書(shū)人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤壕吹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后删铃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體耳贬,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年猎唁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咒劲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诫隅,死狀恐怖腐魂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逐纬,我是刑警寧澤挤渔,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站风题,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嫉父。R本人自食惡果不足惜沛硅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绕辖。 院中可真熱鬧摇肌,春花似錦、人聲如沸仪际。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至肯适,卻和暖如春变秦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背框舔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工蹦玫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刘绣。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓樱溉,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親纬凤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子福贞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359

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

  • 初衷:看了很多視頻、文章停士,最后卻通通忘記了挖帘,別人的知識(shí)依舊是別人的,自己卻什么都沒(méi)獲得向瓷。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,016評(píng)論 0 20
  • python的re模塊--細(xì)說(shuō)正則表達(dá)式 可能是東半球最詳細(xì)最全面的re教程,翻譯自官方文檔,因?yàn)楣俜轿臋n寫(xiě)的是真...
    立而人閱讀 22,901評(píng)論 4 46
  • 9.19--9.23 第7章 正則表達(dá)式 正則表達(dá)式是一個(gè)拆分字符串并查詢相關(guān)信息的過(guò)程肠套。 推薦練習(xí)網(wǎng)站: js ...
    如201608閱讀 1,035評(píng)論 0 4
  • Python中的正則表達(dá)式(re) import rere.match #從開(kāi)始位置開(kāi)始匹配,如果開(kāi)頭沒(méi)有則無(wú)re...
    BigJeffWang閱讀 7,087評(píng)論 0 99
  • 正則表達(dá)式到底是什么東西猖任?字符是計(jì)算機(jī)軟件處理文字時(shí)最基本的單位你稚,可能是字母,數(shù)字朱躺,標(biāo)點(diǎn)符號(hào)刁赖,空格,換行符长搀,漢字等...
    獅子挽歌閱讀 2,150評(píng)論 0 9