JavaScript - 正則表達式

定義

正則表達式就是用一個"字符串"來描述一個特征,然后區驗證另一個"字符串"是否符合這個特征

用途

  1. 驗證字符串是否符合指定特征,比如驗證郵件地址
  2. 從一個長文本中查找指定字符串,使用更加靈活
  3. 替換指定文本

普通規則

表達式 作用
a 匹配單個字符a
2 匹配單個字符2
\r, \n 匹配回車, 換行符
\t 匹配制表符 TAB
\ 匹配''本身
^ 匹配'^'本身
$ 匹配'$'本身
. 匹配'.'本身
\d 匹配任意一個0-9的數字
\w 匹配任意一個字母或數字或下劃線,也就是A-Z, a-z, 0-9, _ 中任意一個
\s 匹配包括空格、制表符、換頁符等空白字符的任意一個
. 匹配除換行符\n以外的任意一個字符(包括數字)
[ab5@] 匹配'a' 或 'b' 或 '5' 或 '@'中的任意一個
[^abc] 匹配'a' 'b' 'c' 之外的任意一個字符
[a-z] 匹配'a' 到 'z' 的任意一個字符
[A-Z] 匹配'A' 到 'Z' 的任意一個字符
[A-Z0-3] 匹配'A' 到 'Z' 以及 0 到 3 的任意一個字符
[^A-Z0-3] 匹配除'A' 到 'Z' 以及 0 到 3 以外的任意一個字符
{n} 表達式重復n次, 比如 '\w{2}'相當于\w\w, 'a{5}'相當于aaaaa
{m, n} 表達式至少重復m次,最多重復n次, 比如'ba{1,3}'可以匹配'ba'或'baa'或'baaa'
{m,} 表達式至少重復m次,沒有上限,比如'\w\d{2,}'可以匹配'a12', '_456', 'M1223'等
? 表達式匹配0次或者1次,相當于{0,1},比如'a[cd]?'可以匹配'a', 'ac', 'ad'
+ 表達式匹配至少1次,相當于{1,},比如'a+b'可以匹配'ab', 'aab', 'aaab'等
* 表達式匹配0次或任意次,相當于{0,},比如'^*b'可以匹配'b', '^b', '^^b'等
^ 從字符串開始的地方匹配,不匹配任何字符, 比如'^12'可以匹配'12kp',結果為'12', 不能匹配'kp12'
$ 從字符串結束的地方匹配,不匹配任何字符,比如'12$'可以匹配'kp12',結果為'12',不能匹配'12kp'
\b 匹配一個單詞邊界,也就是單詞和空格之間的位置,不匹配任何字符,即一邊是屬于\w,另一邊不屬于\w,比如:用'./b.'去匹配"abc_123中文d3=efg漢字%",結果是'3中', '文', '3=', 'g漢', 又比如用'\bto\b'去匹配'today to too'得到結果是:'to', 'today'以及'too'中的to并不能被匹配到,因為\b要求一邊屬于\w,另一邊不屬于\w,而'today'中的'd'也屬于\w范圍內
豎線 左右兩邊表達式是'或'的關系,匹配左邊或者右邊
() (1) 在被修飾匹配次數的時候,括號中的表達式可以作為整體被修飾 (2) 取匹配結果的時候,括號中的表達式匹配到的內容可以被單獨得到

高級規則

  • 貪婪與非貪婪

** 貪婪模式 **

在使用修飾匹配次數的特殊符號時,有多種表示方法可以使同一個表達式能夠匹配不同的次數,比如: '{m,n}', '{m,}', '?', '*', '+', 具體匹配的次數隨被匹配字符串而定,這種重復匹配不定次數的表達式在匹配過程中,總是盡可能多的匹配,比如,針對文本'dxxxdxxxd',舉例如下:

表達式 匹配結果
(d)(\w+) '\w+' 將匹配第一個'd'之后的所有字符'xxxdxxxd'
(d)(\w+)(\d) '\w+'將匹配第一個'd'和最后一個'd'之間的所有字符'xxxdxxx', 雖然'\w+'也能匹配上最后一個'd',但是為了使整個表達式匹配成功,'\w+'可以讓出它本來能夠匹配的最后一個'd'

由此可見,'+', '*', '{m,n}'等表達式都是盡可能多的匹配,帶'?'的表達式在可匹配可不匹配的時候,也是盡可能的要匹配,這種匹配原則叫做'貪婪'模式

非貪婪模式

在修飾匹配次數的特殊符號后再加上一個'?'號,則可以使匹配次數不定的表達式盡可能少的匹配,使可匹配可不匹配的表達式,盡可能的不匹配,這種匹配原則叫做'非貪婪'模式,也叫做'勉強'模式,如果少匹配就會導致整個表達式匹配失敗的時候,與貪婪模式類似,非貪婪模式會最小限度的再匹配一些,以使整個表達式匹配成功,舉例如下,針對文本'dxxxdxxxd'匹配:

表達式 匹配結果
(d)(\w+?) '\w+?' 將盡可能少的匹配第一個'd'之后的字符,'\w+?'匹配結果是'x'
(d)(\w+?)(\d) 為了讓整個表達式匹配成功,'\w+?'不得不匹配'xxx'才可以讓后邊的'd'得到匹配,從而使整個表達式匹配成功,因此,'\w+?'匹配結果是'xxx'
  • 反向引用 \1, \2……
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,619評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,155評論 3 425
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,635評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,539評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,255評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,646評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,655評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,838評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,399評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,146評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,338評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,893評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,565評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,983評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,257評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,059評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,296評論 2 376

推薦閱讀更多精彩內容