javascript中的Regex的貪婪模式和非貪婪模式等若干問題

來源:互聯網
上載者:User

1、貪婪模式:根據匹配字串以及運算式儘可能多的進行匹配,稱為貪婪匹配模式 
   例如:/a\d+/ 即可以匹配首字母為a的之後的許多數字,這個不進行限制 
     或者另外一種方法/a\d{2,}/也可以實現同樣的方法 

2、非貪婪模式:根據匹配字串以及運算式儘可能少的進行匹配。使用的方法就是在修飾匹配次數的特殊符號後再加上一個?號進行限制
如"*?","+?","{n,}?","{n,m}?" 
如:/a\d+?/即匹配的字串為a為首字母,後面只能有一個數字 

3、複雜模式 分為分組,反向引用,候選,非捕獲性分組,前瞻,邊界定位器和多行模式等 
  1)、分組,引入()的概念,其文法是(pattern),即將“pattern”部分組合成一個可以統一操作的組合項或子匹配,也就是說用括弧括起一些字元,字元類或者量詞等,每個捕獲的字匹配項按照其出現的順序儲存在緩衝區中。 如:/(abc){3}/如過匹配的字串是wcabcabcabc的話則可以匹配到的字串是abcabcabc 
  2)、反向引用  分組得到的子匹配,Regex後面的部分,可以引用前面分組的子匹配中已經匹配到的字串,這稱之為反向引用
文法是\num,即可以引用編號為num的內容 其值是1-99的整數 如:/(\w)\2{2}/ 其中\2{2}表示子匹配 如果/\w{5}/可以匹配目標字串中連續出現的幾個字元,則可以是用/\w\1{5}/來匹配。Regex/<(\w+)\s*(\w+(=('|").*?\4)?\s*)*>.*?</\1>/就可以匹配<td id="td2" style="float:left"></td> 這裡的\1就是匹配的第一個括弧中\w+的內容。 
  3)、候選: 即用“|”來表示匹配的運算式之間的或關係,文法是運算式|運算式,兩個運算式是或的關係。如匹配有線電話號碼
有3位區號8位號碼和4位區號7位號碼這兩類,在寫Regex的時候就可以寫/(((\d{3}\)|\d{3}-)\d{8})|(((\d{4}\)|\d{4}-)\d{7})$/即表達了兩類方式如023-47854xxx或者023/47854xxx  或者0234/xxxxxxx 0234-xxxxxxx 
   4)、非捕獲性分組:其文法是(?:pattern),將pattern部分組合成為一個可以統一進行操作的組合項,但是不把這部分內容當做子匹配捕獲,這種方法必須在進行組合,但是又不想對組合的部分進行緩衝的情況下使用。如找倆單詞:programe和project 
前面的pro都相同,則可以寫成/programe|project/或者是/pro(gram|ject)/,如果進行非捕獲性匹配的話就要寫成/pro(?:gram|ject)/ 
   5)、正向前瞻:文法是(?=pattern) 在目標字串的響應位置必須要有pattern部分匹配的內容,但是不作為匹配結果處理,不會放在緩衝區中。/windows(?=xp|7)/,只能匹配windows
xp和windows7,不能匹配其他的內容 xp和7不作為結果返回。 
   6)、負向前瞻:文法是(?!pattern) 在被搜尋的字串的相應位置不能有pattern部分表示的內容,不能將其作為結果進行處理,也不會存在緩衝區中。
如/bed(?!room)/可以匹配bed後不是room的所有字串 
  7)、邊界定位器:^ 與字串開始的地方匹配,不匹配任何字元
但是如果是放在[^a-z]的時候就表示匹配除了a-z以外的字串。$表示與字串結束的地方匹配,也是不匹配任何的字元。\b 匹配一個單詞的邊界,也就是單詞和空格之間的位置,不匹配任何字元  \B是\b的“非”,即是匹配一個非單詞邊界。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.