JavaScript正規表示式進階指南
**摘要:**正規表示式是程式設計師的必備技能,想不想多學幾招呢?
本文用JavaScript的方法來測試正規表示式。
例如,正規表示式**/F.*g/會匹配“以F開頭,以g結尾的字串”,因此可以匹配"Hello, Fundebug!"中的**,exec方法會返回一個陣列,其第一個元素為所匹配的子字串。
/F.*g/.exec("Hello, Fundebug!")[0]
// 'Fundebug'
非貪婪匹配
預設情況下,正規表示式的量詞***、+、?、{},都是進行貪婪匹配,即匹配儘可能多的字元**。
例如,正規表示式**/.+s/**匹配的是“以空格符結尾的字串”,我們用它來匹配蘋果公司創始人賈伯斯在史丹佛大學演講的名言“You time is limited, so don’t waste it living someone else’s life.”:
/.+s/.exec("You time is limited, so don’t waste it living someone else’s life.")[0]
// 'You time is limited, so don’t waste it living someone else’s '
**.可以匹配任意字元,而+表示匹配1次或者多次,且是貪婪的,因此/.+s.+?s/**匹配到第一個空格符就會結束:
/.+?s/.exec("You time is limited, so don’t waste it living someone else’s life.")[0]
// 'You '
正向肯定查詢
使用正規表示式**,可以匹配’x’僅僅當’x’後面跟著’y’。這話有點繞,簡單地說,就是匹配後面是y的x**,這裡的x和y都代表正規表示式。
例如,對於部落格的地址"https://blog.fundebug.com/2018/04/20/rabbitmq_tutorial/",如果需要匹配出域名fundebug的話,可以使用**/[a-z]+(?=.com)/**,匹配“在.com前面的英文單詞”
/[a-z]+(?=.com)/.exec("https://blog.fundebug.com/2018/04/20/rabbitmq_tutorial/")[0]
// 'fundebug'
廣告:歡迎免費試用,為您監控線上程式碼的BUG,提高使用者體驗~
正向否定查詢
與正向肯定查詢所對應的是正向否定查詢,使用正規表示式****,可以"匹配’x’僅僅當’x’後面不跟著’y’"。
例如,小學生都知道的圓周率是3.1415926,不會的同學可以這樣記“山頂上有一座寺廟,寺廟裡面有一壺酒,還有一塊肉”。如何匹配小數點後面的數字呢?可以使用**/d+(?!.)/**,匹配"後面沒有小數點的數字":
/d+(?!.)/.exec("3.1415926")[0]
// '1415926'
而使用之前提到的正向肯定查詢,就可以匹配小數點前面的數字:
/d+(?=.)/.exec("3.1415926")[0]
// '3'
多行匹配
下面是鮑勃·迪倫的《Forever Young》歌詞:
May God bless and keep you always,
may your wishes all come true,
may you always do for others
and let others do for you.
may you build a ladder to the stars
and climb on every rung,
may you stay forever young,
forever young, forever young,
May you stay forever young.
如何匹配以forever開頭的那句歌詞forever young, forever young呢?
這樣寫**/^forever.+/**是錯誤的:
/^forever.+/.exec("May God bless and keep you always,nmay your wishes all come true,nmay you always do for othersnand let others do for you.nmay you build a ladder to the starsnand climb on every rung,nmay you stay forever young,nforever young, forever young,nMay you stay forever young.")
// null
為什麼錯了?因為**^**匹配的整個字串的開始,而是不是每一行的開始。
正規表示式指定m選項,即可支援多行匹配,這時****和**$**匹配的是每一行的開始和結束,因此正確的正規表示式是**/forever.+/m**:
/^forever.+/m.exec("May God bless and keep you always,nmay your wishes all come true,nmay you always do for othersnand let others do for you.nmay you build a ladder to the starsnand climb on every rung,nmay you stay forever young,nforever young, forever young,nMay you stay forever young.")[0]
// 'forever young, forever young,'
捕獲括號
在正規表示式中使用小括號(),可以提取出字串中的特定子串。
例如,是在2016年雙11的,時間是"2016-11-11",如何提取其中的年、月、日呢?如下:
/(d{4})-(d{2})-(d{2})/.exec("2016-11-11")
// [ '2016-11-11', '2016', '11', '11', index: 0, input: '2016-11-11' ]
可知,3個小括號中的正規表示式分別匹配的是年月日,其結果依次為exec返回陣列中的1到3號元素。
參考
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/506/viewspace-2809306/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 進階7 正規表示式
- 【JavaScript】正規表示式JavaScript
- javascript正規表示式JavaScript
- javascript–正規表示式JavaScript
- JavaScript 正規表示式JavaScript
- 正規表示式系列之中級進階篇
- JavaScript正規表示式(2)JavaScript
- JavaScript的正規表示式JavaScript
- Python語法進階(2)- 正規表示式Python
- JavaScript權威指南(10)——正規表示式的模式匹配JavaScript模式
- JavaScript正規表示式 手冊JavaScript
- 淺談JavaScript正規表示式JavaScript
- JavaScript匹配中文正規表示式JavaScript
- javascript正規表示式總結JavaScript
- 初學JavaScript正規表示式JavaScript
- 16、JavaScript-正規表示式JavaScript
- javascript正規表示式小技巧JavaScript
- javascript正規表示式 | 知識梳理JavaScript
- JavaScript正規表示式方法總結JavaScript
- JavaScript匹配註釋正規表示式JavaScript
- JavaScript學習1:正規表示式JavaScript
- Javascript正規表示式詳解(一)JavaScript
- Javascript校驗與正規表示式JavaScript
- [.net 物件導向程式設計進階] (4) 正規表示式 (三) 表示式助手物件程式設計
- Python 正規表示式(RegEx)指南Python
- Linux正規表示式使用指南Linux
- Linux正規表示式技術指南Linux
- python進階(20) 正規表示式的超詳細使用Python
- 32.企業級開發進階4:正規表示式
- Linux系統程式設計(17)——正規表示式進階Linux程式設計
- JavaScript基礎-06-正規表示式JavaScript
- JavaScript RegExp(正規表示式) 物件JavaScript物件
- 《JavaScript 闖關記》之正規表示式JavaScript
- 系統認識JavaScript正規表示式JavaScript
- JavaScript正規表示式迷你書-筆記JavaScript筆記
- [記錄]javascript常用的正規表示式JavaScript
- 簡單學習 JavaScript 正規表示式JavaScript
- javascript常用的驗證正規表示式JavaScript