摘要:非貪婪匹配默認情況下,正則表達式的量詞,都是進行貪婪匹配,即匹配盡可能多的字符。參考正則表達式關于專注于微信小程序微信小游戲支付寶小程序和線上應用實時監控。自從年雙十一正式上線,累計處理了億錯誤事件,付費客戶有金山軟件百姓網等眾多品牌企業。
摘要:正則表達式是程序員的必備技能,想不想多學幾招呢?
本文用JavaScript的exec方法來測試正則表達式。
例如,正則表達式/F.*g/會匹配“以F開頭,以g結尾的字符串”,因此可以匹配"Hello, Fundebug!"中的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(?=y),可以匹配"x"僅僅當"x"后面跟著"y"。這話有點繞,簡單地說,就是匹配后面是y的x,這里的x和y都代表正則表達式。
例如,對于博客RabbitMQ入門教程的地址"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"
廣告:歡迎免費試用Fundebug,為您監控線上代碼的BUG,提高用戶體驗~
正向否定查找與正向肯定查找所對應的是正向否定查找,使用正則表達式x(?!y),可以"匹配"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, 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.") // null
為什么錯了?因為^匹配的整個字符串的開始,而是不是每一行的開始。
正則表達式指定m選項,即可支持多行匹配,這時^和$匹配的是每一行的開始和結束,因此正確的正則表達式是/^forever.+/m:
/^forever.+/m.exec("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.")[0] // "forever young, forever young,"捕獲括號
在正則表達式中使用小括號(),可以提取出字符串中的特定子串。
例如,Fundebug是在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號元素。
參考MDN:正則表達式
關于FundebugFundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java線上應用實時BUG監控。 自從2016年雙十一正式上線,Fundebug累計處理了10億+錯誤事件,付費客戶有Google、360、金山軟件、百姓網等眾多品牌企業。歡迎大家免費試用!
版權聲明轉載時請注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2018/05/02/advanced_regular_expression/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94978.html
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...
摘要:一團隊組織網站說明騰訊團隊騰訊前端團隊,代表作品,致力于前端技術的研究騰訊社交用戶體驗設計,簡稱,騰訊設計團隊網站騰訊用戶研究與體驗設計部百度前端研發部出品淘寶前端團隊用技術為體驗提供無限可能凹凸實驗室京東用戶體驗設計部出品奇舞團奇虎旗下前 一、團隊組織 網站 說明 騰訊 AlloyTeam 團隊 騰訊Web前端團隊,代表作品WebQQ,致力于前端技術的研究 ISUX 騰...
摘要:一團隊組織網站說明騰訊團隊騰訊前端團隊,代表作品,致力于前端技術的研究騰訊社交用戶體驗設計,簡稱,騰訊設計團隊網站騰訊用戶研究與體驗設計部百度前端研發部出品淘寶前端團隊用技術為體驗提供無限可能凹凸實驗室京東用戶體驗設計部出品奇舞團奇虎旗下前 一、團隊組織 網站 說明 騰訊 AlloyTeam 團隊 騰訊Web前端團隊,代表作品WebQQ,致力于前端技術的研究 ISUX 騰...
摘要:一團隊組織網站說明騰訊團隊騰訊前端團隊,代表作品,致力于前端技術的研究騰訊社交用戶體驗設計,簡稱,騰訊設計團隊網站騰訊用戶研究與體驗設計部百度前端研發部出品淘寶前端團隊用技術為體驗提供無限可能凹凸實驗室京東用戶體驗設計部出品奇舞團奇虎旗下前 一、團隊組織 網站 說明 騰訊 AlloyTeam 團隊 騰訊Web前端團隊,代表作品WebQQ,致力于前端技術的研究 ISUX 騰...
閱讀 1623·2021-11-22 14:45
閱讀 1074·2021-11-17 09:33
閱讀 3327·2021-09-02 09:48
閱讀 974·2019-08-30 15:54
閱讀 2770·2019-08-30 15:53
閱讀 2558·2019-08-30 12:54
閱讀 2248·2019-08-29 12:37
閱讀 2427·2019-08-26 13:58