摘要:開始一個完整的正則表達式通常由兩部分組成普通的字符不普通的元字符。元字符匹配正則表達式中有著豐富的元字符提供,這里我們選擇常用的進行具體講解。
作為一個程序員,我們在日常的開發過程中需要對一些文本內容進行快速查找匹配以及內容替換等操作,而我們最常用的方法就是通過正則表達式來實現。什么是正則表達式呢?我們可以理解為是一種專門處理文字的工具,通過制定規則來匹配文字的位置或者內容,對結果進行操作。
開始一個完整的正則表達式通常由兩部分組成普通的字符、不普通的元字符。普通字符很好理解指的就是26個英文字母大小寫a(A)~z(Z)和數字0~9,不普通的元字符從字面上可以看出點特殊,元字符其實就是指具備一些特殊含義的字符 例如 ".*?+^$"等,那么字符和元字符可以互轉嘛?答案是可以的,神奇的元字符反斜杠""也可以實現這個功能,客官別不信,我們接著看~~
字符匹配在正則表達式中我們可以通過普通的字母和數字組成最基本的匹配規則,對內容進行一一對應,例如 我們現在想在"hello,world!"中找到"hello",我們通過 /hello/ 正則表達式就可以了。
但單單只通過普通字符匹配往往是不能滿足我們的需求的,例如 現在有一段內容"***分割線***",我們希望把內容中的""替換成"-",可""是元字符具有特殊含義,因此這個時候指通過普通字符是無法實現的,但通過轉義字符就可以實現,后面我們會講到。
元字符匹配正則表達式中有著豐富的元字符提供,這里我們選擇常用的進行具體講解。
多字符匹配在字符匹配章節我們舉例從"hello,world!"中找到"hello",我們通過一一對應的方式篩選對應的字符,但在實際場景中我們經常會遇到一對多的情況,例如"hello,xx!","xx"對應的可能是"world"也可能是任意其他字符,這個時候我們通過單字符匹配的話顯然很低效,如果能有一種模式涵蓋表示這類字符豈不快哉,各位看官,現在我們推出第一個元字符,代表集合含義的[],集合顧名思義就是某一類的合,現在我們對正則進行改寫即 /hello,[abc]/ ,這時候我們可以同時匹配a,b,c三個字符,但這種寫法依然很低效,我們需要一個能表示區間的字符,區間元字符 - 正合適,這時候我們可以寫成 /hello,[a-z]/ ,這時候我們就可以匹配所有26個小寫英文字母了,即便如此,在某些場景下我們單單有集合和區間去匹配多個字符也是很低效的,所以正則表達式衍生出了很多可以匹配多個字符的簡寫方式:
正則表達式 | 含義 |
---|---|
. | 除換行符之外的任意字符 |
d | 數字 0~9 (即[0-9]) |
D | 與d相反,表示 除了數字0~9的任意字符 |
w | 26個大小寫字母、數字、下劃線(即[a-zA-Z0-9_]) |
W | 與w相反,表示 除了基本字符和下劃線的任意字符 |
s | 空字符,包括 制表符、換頁符、換行符、空格 |
S | 與s相反,表示 非空字符? |
我們在進行對字符匹配的時候往往需要對匹配的字符數量進行限制,本章節就數量元字符進行講解,從字面意義可以看出數量元字符肯定就是對匹配字符的個數進行限制啦,例如 同樣是上面的"hello,world",我們需要找出"hello",一種方式通過單子符匹配方式即 /hello/ ,其實我們還可以對其進行簡化,表示精確區間范圍的 {min,max} or{num}元字符,"hello"中"l"出現了兩次,那么我們就可以改寫成 /hel{2}o/ ,當然這個例子比較簡單,我們換個復雜一點的,現在我們需要從"OObama like bababanana ..."中找出"ba"連續出現2次以上的地方,從內容上可以看出"ba"出現的地方有兩處,這個時候我們實際要找的是"bababa",所以我們可以寫成 /ba{2,}/ ,除了 {} 外,正則表達式還有很多用來數量匹配的元字符:
正則表達式 | 含義 |
---|---|
? | 匹配0或1個字符(即0|1) |
* | 匹配0或者多個字符(即0|n) |
+ | 匹配1或者多個字符(即1|n) |
{min,max} or {num} | 精確區間匹配,min表示最少,max表示最多個數,num表示精確個數 |
位置元字符主要是用來限制查找內容的范圍,例如限制在內容的開頭或者內容的結尾等,舉個例子 "Hello,World!Hello, China"我們想查找開頭的"Hello",但內容中"Hello"出現了兩次,因此我們需要一個可以限制查找范圍為內容開頭的元字符, /^/ 表示匹配表達式的開頭,所以我們改為/^Hello/,有客官舉報說,大騙子,我通過 /Hello/ 也可以匹配到,好,我們換一個,現在改成"World is my World!",我需要匹配第二個"World",這...不慌不慌,我們通過 /$/ 限制查找范圍是表達式的結尾就可以了,即 /World$/ ,除了限制范圍是開頭、結尾,我們還可以通過 // 來限制單詞的邊界,或者 /(?=xx)/ 來匹配某個(xx)前面的內容符合表達式的字符,通過 /?<=xx/ 來匹配某個后面的內容符合表達式的字符,舉個例子現在有"People like apple",我想在所有ple的單詞中找到符合ple前面為"ap"的那個ple,則可以寫成/(?<=ap)ple/,總結正則表達式中對位置進行匹配的元字符有:
?正則表達式 | 含義 |
---|---|
^ | 匹配表達式的開頭 |
$ | 匹配表達式的結尾 |
b | 匹配單詞的邊界 |
B | 匹配非單詞的邊界 |
(?=xx) | 向前匹配符合xx規則的副詞 |
(?!xx) | 向前匹配不符合xx規則的副詞 |
(?<=xx) | 向后匹配符合xx規則的副詞 |
(? | 向后匹配不符合xx規則的副詞 |
通過正則表達式進行內容匹配的時候,我們會遇到對全文內容匹配、多行內容匹配等場景,正則表達式也提供了三種模式元字符進行模式匹配。g表示全局模式,即匹配所有的內容;i表示忽略大小寫,即匹配內容的時候忽略字母的大小寫;
m表示多行匹配模式,即對多行內容進行匹配,并且各種模式可以混合使用,例如"Hello World, hello China",我們需要匹配所有的"Hello"且不區分大小寫,即/hello/ig。
正則表達式 | 含義 |
---|---|
g | 匹配全局模式 |
i | 匹配不區分字母大小寫 |
m | 匹配多行模式 |
?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109687.html
摘要:于是找來了前輩們留下的經典原生練習題,以期把看過的內容用起來,加深自己對原生的掌握。鼠標移入移出改變樣式實現效果繼續樣式轉換,雖然用的偽類便能實現,但既然是的練習題就得用用鼠標事件了。 0x0關于這個系列 差不多把《js高級程序設計》刷完了,所謂實踐出真知,尤其編程這種實踐和經驗相當重要的事情,不能光說不做。但以我現在的水平,直接上手那些大項目是還是不夠格的,還是得一步步扎實好基礎再有...
摘要:說來慚愧,做前端快三年對于正則表達式的應用還是很淺薄,大家都知道正則的速度基本上是最快的,但就是懶得去記那些語法和規則,這次項目中多次用到了需要匹配替換的動作,終于下定決心去研究一下了。 說來慚愧,做前端快三年對于正則表達式的應用還是很淺薄,大家都知道正則的速度基本上是最快的,但就是懶得去記那些語法和規則,這次項目中多次用到了需要匹配替換的動作,終于下定決心去研究一下了。 實例化正則對...
摘要:日常代碼的開發中,大家都或多或少的碰到一些正則表達式,但有的朋友只是會用,或者大致明白,希望這篇對正則深入淺出的文章能夠讓大家有所收獲。主要可以干的事情有兩個,引用和反向引用,在一些稍微復雜的正則表達式里,我們常常會用到這些。 日常代碼的開發中,大家都或多或少的碰到一些正則表達式,但有的朋友只是會用,或者大致明白,希望這篇對正則深入淺出的文章能夠讓大家有所收獲。 基本語法 [xyz] ...
摘要:日常代碼的開發中,大家都或多或少的碰到一些正則表達式,但有的朋友只是會用,或者大致明白,希望這篇對正則深入淺出的文章能夠讓大家有所收獲。主要可以干的事情有兩個,引用和反向引用,在一些稍微復雜的正則表達式里,我們常常會用到這些。 日常代碼的開發中,大家都或多或少的碰到一些正則表達式,但有的朋友只是會用,或者大致明白,希望這篇對正則深入淺出的文章能夠讓大家有所收獲。 基本語法 [xyz] ...
摘要:日常代碼的開發中,大家都或多或少的碰到一些正則表達式,但有的朋友只是會用,或者大致明白,希望這篇對正則深入淺出的文章能夠讓大家有所收獲。主要可以干的事情有兩個,引用和反向引用,在一些稍微復雜的正則表達式里,我們常常會用到這些。 日常代碼的開發中,大家都或多或少的碰到一些正則表達式,但有的朋友只是會用,或者大致明白,希望這篇對正則深入淺出的文章能夠讓大家有所收獲。 基本語法 [xyz] ...
閱讀 3296·2021-11-24 09:39
閱讀 2804·2021-10-12 10:20
閱讀 1906·2019-08-30 15:53
閱讀 3075·2019-08-30 14:14
閱讀 2600·2019-08-29 15:36
閱讀 1120·2019-08-29 14:11
閱讀 1956·2019-08-26 13:51
閱讀 3408·2019-08-26 13:23