一、環視
1:環視不“占用”字符,只匹配字符所在的特定位置。
2:正則表達式是從左向右進行匹配的。
二、肯定順序環視(?=....)
子表達式匹配當前位置的右側字符
圖中:紅色表示當前位置,綠色表示正則匹配,黃色表示斷言匹配
(1):起始位為0
(2):從左向右查看文本,如果當前位置字符與表達式2匹配成功,就查看右側文本是否滿足斷言條件,當條件1與條件2都成立時就匹配成功。
三、肯定逆向環視(?<=...)
子表達式匹配當前位置的左側字符
圖中:紅色表示當前位置,綠色表示正則匹配,黃色表示斷言匹配
(1):起始位為0
(2):從左向右查看文本,如果當前位置的左側能與表達式(?=4)匹配成功,就進入下一個表達式2的匹配。當條件1與條件2都成立時就匹配成功。
三、否定逆向環視(?<!...)與否定順序環視(?!...)
類似邏輯表達式 非
四、實例-1 行分位
'use strict'; { // 千分位 let str = "當前消費 ¥1203.00元"; let reg = new RegExp(/(?<=\d)(?=(?:\d{3})+(?!\d))/g); let result = str.replace(reg,','); console.log(result); //當前消費 ¥1,203.00元 }
五、實例-2 電話號碼格式化
'use strict'; { // 電話號碼格式化為:xxx-xxxx-xxxx let str = "18210443800"; let reg = new RegExp(/(?<=\d)(?=(?:\d{4})+(?!\d))/g); let result = str.replace(reg,'-'); console.log(result); // 182-1044-3800 }
六、實例-3 身份證號格式化
'use strict'; { // 身份證號格式化為:xxxxxx xxxx xxxx xxxx let str = "110101199003070812"; // 隨便輸的號碼 用於測試 let reg = new RegExp(/(?<=\d{6})(?=(?:\d{4})+(?!\d))/g); let result = str.replace(reg,' '); console.log(result); // 110101 1990 0307 0812 }
我的百度經驗地址:https://jingyan.baidu.com/article/e73e26c07f51a724adb6a7e4.html