<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【正則】956- 正則表達式有幾種位置匹配模式?

          共 2632字,需瀏覽 6分鐘

           ·

          2021-05-16 04:03

          最近再一次重溫老姚大佬的《JavaScript 正則表達式迷你書》 , 并將核心知識點整理一遍,方便復習。

          原書寫得非常棒,建議看下原書啦。  地址:https://github.com/qdlaoyao/js-regex-mini-book

          位置匹配,就是要匹配每個字符兩邊的位置。

          ES5 中有6個位置:^,$,\b\B,(?=p)(?!p)

          另外把位置理解成空字符是非常有用的:

          /^^hello$$/.test('hello');  // true
          /^^^hello$$/.test('hello'); // true

          1. ^ 和 $

          ^ 匹配開頭,多行中匹配行開頭。
          $ 匹配結尾,多行中匹配行結尾。

          "hello".replace(/^|$/g"#"); // "#hello#"
          "hello\nleo\nhaha".replace(/^|$/gm"#");
          /*
          #hello#
          #leo#
          #haha#
          */

          多行匹配模式使用 m 修飾符。

          2. \b\B

          \b 匹配單詞邊界,即 \w\W 之間的位置,包括 \w^ 之間的位置,和 \w$ 之間的位置。
          \B 和  \b 相反,即非單詞邊界,匹配中除去 \b,剩下的都是 \B 的。也就是 \w\w、 \W\W、^\W,\W$ 之間的位置。。

          "[HI] Leo_1.mp4".replace(/\b/g,"#");
          // "[#HI#] #Leo_1#.#mp4#"

          "[HI] Leo_1.mp4".replace(/\B/g,"#");
          // "#[H#I]# L#e#o#_#1.m#p#4"

          3. (?=p)(?!p)

          p 為一個子模式,即 (?=p) 匹配前面是 p 的位置,而 (?!p) 則匹配前面不是 p 的位置。

          "hello".replace(/(?=l)/g"#");
          // "he#l#lo"

          "hello".replace(/(?!l)/g"#");
          // "#h#ell#o#"

          4. 相關案例

          • 匹配數(shù)字千位分隔符
          // 匹配最后一個逗號
          "12345678".replace(/(?=\d{3}$)/g","); // "12345,678"

          // 匹配所有逗號
          "12345678".replace(/(?=(\d{3})+$)/g","); // "12,345,678"

          // 匹配其余
          "123456789".replace(/(?=(\d{3})+$)/g","); // ",123,456,789"

          // 修改
          "123456789".replace(/(?!^)(?=(\d{3})+$)/g","); // "12,345,678"

          // 其他形式
          "12345678 123456789".replace(/(?!\b)(?=(\d{3})+\b)/g","); 
          // (?!\b) 等于 \B ,要求當前是一個位置,但不是 \b 前面的位置
          // "12,345,678 123,456,789"
          • 數(shù)據(jù)格式化
          let num = 1888;
          num.toFixed(2).replace(/\B(?=(\d{3})+\b)/g",").replace(/^/,"$$ ");
          // "$ 1,888.00"
          • 驗證密碼
          // 密碼長度 6-12 位數(shù)字或字母
          let r = /^[0-9A-Za-z]{6,12}$/;

          // 必須包含一個字符(數(shù)字) + 密碼長度 6-12 位數(shù)字或字母
          let r = /(?=.*[0-9])^[0-9A-Za-z]{6,12}$/;

          // 必須包含兩個個字符(數(shù)字和小寫字符)  + 密碼長度 6-12 位數(shù)字或字母
          let r = /(?=.*[0-9])(?=.*[a-z])^[0-9A-Za-z]{6,12}$/;

          r.test("aa1234566"); // true
          r.test("1234566");   // false


          // 密碼長度 6-12 位數(shù)字或字母 
          // 即 不能全是數(shù)字 或 不能全是大寫或小寫字母
          let r = /(?!^[0-9]{6,12}$)(?!^[a-z]{6,12}$)(?!^[A-Z]{6,12}$)^[0-9A-Za-z]{6,12}$/;


          1. JavaScript 重溫系列(22篇全)
          2. ECMAScript 重溫系列(10篇全)
          3. JavaScript設計模式 重溫系列(9篇全)
          4. 正則 / 框架 / 算法等 重溫系列(16篇全)
          5. Webpack4 入門(上)|| Webpack4 入門(下)
          6. MobX 入門(上) ||  MobX 入門(下)
          7. 120+篇原創(chuàng)系列匯總

          回復“加群”與大佬們一起交流學習~

          點擊“閱讀原文”查看 120+ 篇原創(chuàng)文章

          瀏覽 59
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕婷婷 | www.99热视频 | 俺也去俺去啦 | 狼友在线视频 | 国产一区久久 |