乱码乱a∨中文字幕,在线免费激情视频,亚洲欧美久久夜夜潮,国产在线网址

  1. <sub id="hjl7n"></sub>

    1. <sub id="hjl7n"></sub>

      <legend id="hjl7n"></legend>

      當前位置:首頁 >  站長 >  編程技術 >  正文

      JavaScript正則表達式迷你書之貪婪模式-學習筆記

       2020-12-15 15:54  來源: 腳本之家   我來投稿 撤稿糾錯

        阿里云優(yōu)惠券 先領券再下單

      這篇文章主要介紹了JavaScript正則表達式迷你書之貪婪模式-學習筆記,需要的朋友可以參考下

      貪婪模式:

      在使用修飾匹配次數(shù)的特殊符號時,有幾種表示方法可以使同一個表達式能夠匹配不同的次數(shù),比如:"{m,n}", "{m,}", "?", "*", "+",具體匹配的次數(shù)隨被匹配的字符串而定。這種重復匹配不定次數(shù)的表達式在匹配過程中,總是盡可能多的匹配

      非貪婪模式:

      在修飾匹配次數(shù)的特殊符號后再加上一個 "?" 號,則可以使匹配次數(shù)不定的表達式盡可能少的匹配,使可匹配可不匹配的表達式,盡可能的 "不匹配"。這種匹配原則叫作 "非貪婪" 模式,也叫作 "勉強" 模式。如果少匹配就會導致整個表達式匹配失敗的時候,與貪婪模式類似,非貪婪模式會最小限度的再匹配一些,以使整個表達式匹配成功。

      var regex = /\d{2,5}/g;
      var string = "123 1234 12345 123456";
      console.log( string.match(regex) );
      // => ["123", "1234", "12345", "12345"]

      其中正則 /d{2,5}/,表示數(shù)字連續(xù)出現(xiàn) 2 到 5 次。會匹配 2 位、3 位、4 位、5 位連續(xù)數(shù)字。 但是其是貪婪的,它會盡可能多的匹配。你能給我 6 個,我就要 5 個。你能給我 3 個,我就要 3 個。 反正只要在能力范圍內(nèi),越多越好。

      橫向模糊匹配

      橫向模糊指的是,一個正則可匹配的字符串的長度不是固定的,可以是多種情況的。 其實現(xiàn)的方式是使用量詞。譬如 {m,n},表示連續(xù)出現(xiàn)最少 m 次,最多 n 次。 比如正則 /ab{2,5}c/ 表示匹配這樣一個字符串:第一個字符是 "a",接下來是 2 到 5 個字符 "b",最后是字符 "c"。

      var regex = /ab{2,5}c/g;
      var string = "abc abbc abbbc abbbbc abbbbbc abbbbbbc";
      console.log( string.match(regex) );
      // => ["abbc", "abbbc", "abbbbc", "abbbbbc"]

      縱向模糊匹配

      縱向模糊指的是,一個正則匹配的字符串,具體到某一位字符時,它可以不是某個確定的字符,可以有多種 可能。 其實現(xiàn)的方式是使用字符組。

      譬如 [abc],表示該字符是可以字符 "a"、"b"、"c" 中的任何一個。 比如 /a[123]b/ 可以匹配如下三種字符串: "a1b"、"a2b"、"a3b"。

      var regex = /\d{2,5}?/g;
      var string = "123 1234 12345 123456";
      console.log( string.match(regex) );
      // => ["12", "12", "34", "12", "34", "12", "34", "56"]
      其中 /\d{2,5}?/ 表示,雖然 2 到 5 次都行,當 2 個就夠的時候,就不再往

      多選分支

      一個模式可以實現(xiàn)橫向和縱向模糊匹配。而多選分支可以支持多個子模式任選其一。 具體形式如下:(p1|p2|p3),其中 p1、p2 和 p3 是子模式,用 |(管道符)分隔,表示其中任何之一。 例如要匹配字符串 "good" 和 "nice" 可以使用 /good|nice/。

      var regex = /good|nice/g;
      var string = "good idea, nice try.";
      console.log( string.match(regex) );
      // => ["good", "nice"]

      但有個事實我們應該注意,比如我用 /good|goodbye/,去匹配 "goodbye" 字符串時,結果是 "good"

      var regex = /good|goodbye/g;
      var string = "goodbye";
      console.log( string.match(regex) );
      // => ["good"]

      而把正則改成 /goodbye|good/,結果是:

      var regex = /goodbye|good/g;
      var string = "goodbye";
      console.log( string.match(regex) );
      // => ["goodbye"]

      也就是說,分支結構也是惰性的,即當前面的匹配上了,后面的就不再嘗試了。

      反向引用

      比如要寫一個正則支持匹配如下三種格式

      2020-02-25

      2020/02/25

      2020.02.25

      var regex = /\d{4}(-|\/|.)\d{2}(-|\/|.)\d{2}/;
      var string1 = "2020-06-12";
      var string2 = "2020/06/12";
      var string3 = "2020.06.12";
      var string4 = "2020-02/12";
      console.log( regex.test(string1) ); // true
      console.log( regex.test(string2) ); // true
      console.log( regex.test(string3) ); // true
      console.log( regex.test(string4) ); // true

      其中 / 和 . 需要轉義。雖然匹配了要求的情況,但也匹配 "2016-06/12" 這樣的數(shù)據(jù)。

      假設我們想要求分割符前后一致怎么辦?此時需要使用反向引用:

      var regex = /\d{4}(-|\/|.)\d{2}\1\d{2}/;
      var string1 = "2020-06-12";
      var string2 = "2020/06/12";
      var string3 = "2020.06.12";
      var string4 = "2020-02/12";
      console.log( regex.test(string1) ); // true
      console.log( regex.test(string2) ); // true
      console.log( regex.test(string3) ); // true
      console.log( regex.test(string4) ); // false

      注意里面的 1,表示的引用之前的那個分組 (-|/|.)。不管它匹配到什么(比如 -),1 都匹配那個同 樣的具體某個字符。

      我們知道了 1 的含義后,那么 2 和 3 的概念也就理解了,即分別指代第二個和第三個分組。

      使用例子

      字符串 trim 方法模擬

      function trim(str) {
      return str.replace(/^\s+|\s+$/g, '');
      }

      表示一個 16 進制字符,可以用字符組 [0-9a-fA-F]。 其中字符可以出現(xiàn) 3 或 6 次,需要是用量詞和分支結構。 使用分支結構時,需要注意順序。 正則如下

      var regex = /#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})/g;
      var string = "#ffbbad #Fc01DF #FFF #ffE";
      console.log( string.match(regex) );
      // => ["#ffbbad", "#Fc01DF", "#FFF", "#ffE"]

      上面內(nèi)容就結束了,下面是其他網(wǎng)友的補充可以參考一下

      var regExp = /8.*8/;

      var str = "8google8 8google8 8google8";

      上面例子,是貪婪模式,其實是用了重復(區(qū)間)匹配的正則表達式都為貪婪模式

      前瞻模式是指某個匹配后面必須跟著某個字符串,例子如下

      var regExp = /goo(?=gle)/;

      var strOne = google;

      var strTwo = googoo;

      定語式 返回匹配的是 后面是帶 gle 的;

      捕獲性分組和非捕獲性分組:例子如下:

      var regExp = /(google)\s(2020)/;

      var str = "google 2020";

      返回的 是一組數(shù)組[ google 2020,google,2020]

      var regExp = /(google)\s(?:2020)/;

      var str = "google 2020"

      返回的數(shù)組[google 2020,google]

      以上是看到一個微博 記錄以便以后學習

      JavaScript正則表達式迷你書大家可以看一下,分類很細。

      以上就是JavaScript正則表達式迷你書之貪婪模式-學習筆記的詳細內(nèi)容,更多關于正則表達式迷你書的資料請關注腳本之家其它相關文章!

      來源:腳本之家

      鏈接:https://www.jb51.net/article/181239.htm

      申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!

      相關文章

      熱門排行

      信息推薦