摘要:目錄導語理解正則表達式模式的規則字符串和正則實例的屬性和方法檢索實例小結導語正則表達式是處理字符串的一門藝術手法,應用場景經常出現在表單驗證部分高級程序設計一書開篇提到,這門語言最原始的應用就是處理輸入驗證操作,所以正則表達式從誕生那一刻就
目錄 導語 1.理解正則表達式 2.模式的規則 3.字符串和正則實例的屬性和方法 4.檢索實例 5. 小結 導語
正則表達式是處理字符串的一門藝術手法,應用場景經常出現在表單驗證部分;
JavaScript高級程序設計一書開篇提到,JavaScript這門語言最原始的應用就是處理輸入驗證操作,所以正則表達式從JavaScript誕生那一刻就與其結下不解之緣;
正則表達式(Regular Expression)可以理解為規則表達式,即以表達式的形式定義一項規則,然后根據這一規則去檢索字符串,最后根據匹配結果進行后續的處理操作(判斷、獲取或是替換等);
正則表達式根據創建形式的不同,可分為字面量和構造函數RegExp對象;
1.1 字面量方法
正則表達式的字面量方法由正則模式(pattern)和修飾符(flags)構成;
var regExp = /pattern/flags;
1.2 RegExp構造函數
可以通過RegExp這一構造函數去創建一個正則表達式對象;
var regExp = new RegExp("pattern","flags")
需要注意的二者不同在于:字面量采用/pattern/,而正則對象采用"pattern"字符串;所以出現轉義字符時,構造函數創建的正則對象的參數需要進行轉義;
var regExp = /hello/; var regExp1 = new RegExp("hello");
1.3 flags規則
模式的規則將會在下文多帶帶開一章講解,先講述flags規則;
正則表達式可以添加3個修飾符從而起到改變檢索規則的作用;
g:表示全局模式,檢索所有字符串,而不是發現第一個匹配項時停止檢索;
i:表示忽略大小寫模式;
m:表示多行模式,進行多行的檢索;
2. 模式的規則模式的規則是正則表達式的核心部分,模式可有普通字符(打印字符和非打印字符)和特殊字符構成;
2.1 普通字符
普通字符由所有數字、中外文字母、標點符號和非打印字符構成;
非打印字符包括:
cx:control-x :換行符; :回車符; :制表符; v:垂直制表符; f:換頁符; s:空白字符,等價于[f v]
2.2 特殊字符
所謂特殊字符,就是具有特殊含義的字符,包括:限定符、定位符、類型符、分組符、條件符、非獲取匹配符等
限定符
限定符限定一個正則表達式出現次數;
*:匹配前面子表達式任意次,等價于{0,}; +:匹配前面子表達式1次以上,等價于{1,}; ?:匹配前面子表達式0次或1次,等價于{0,1}; {n}:匹配子表達式n次; {n,}:匹配子表達式n次以上; {n,m}:匹配子表達式n~m次之間,默認是貪婪模式取m次,當在該限定符后面添加?開啟非貪婪模式;這個?可應用于所有限定符后;
定位符
定位符能夠高效匹配到字符出現位置;
^:匹配字符串開始的位置,注意在[]中表示取反匹配; $:匹配字符串結尾的位置; :匹配字符邊界;
類型符
類型符是小羊自己為了記憶方便定義的,就是可以匹配不同的數據類型;
.:匹配除換行符的任意字符; w:匹配任何單詞字符,等價于[a-zA-z0-9]; d:匹配數字;
分組符
():將表達式放入圓括號成為子表達式;
條件符
|:分支條件,匹配位于|兩側的字表達,相當于或;
非獲取匹配符
非獲取匹配符指的是匹配表達式但不獲取匹配結果;
(?:pattern):匹配 pattern 但不獲取匹配結果; (?=pattern):正向預查,在任何匹配 pattern 的字符串開始處匹配查找字符串; (?!pattern):負向預查,在任何不匹配 pattern 的字符串開始處匹配查找字符串
取反操作
下面這幾個都是對應先前特殊字符的取反操作;
D W B S [^pattern]
反向引用
對一個正則表達式模式或部分模式兩邊添加圓括號將導致相關匹配存儲到一個臨時緩沖區中,所捕獲的每個子匹配都按照在正則表達式模式中從左到右出現的順序存儲。緩沖區編號從 1 開始,最多可存儲 99 個捕獲的子表達式;
Is is the cost of of gasoline going up up? /([a-z]+) 1/gi 匹配Is is和up up3.字符串和正則實例的屬性和方法
3.1 字符串的方法
match:接受正則表達式,返回匹配結果;
replace:接受兩個參數,第一個為正則,第二個為替換值(也可以是一個函數),返回新字符串,不改變原字符串;
3.2 正則實例的屬性和方法
正則實例的屬性
正則實例的屬性主要包括ignoreCase、global、multiline返回是否設置修飾符的布爾值,lastIndex返回下一次開始搜索的位置,source返回正則表達式的字符串形式;
正則實例的屬性
test:傳入一個字符串,返回布爾值表示匹配結果的判斷;帶有修飾符g時,每一次test方法都從上一次結束的位置開始向后匹配;
exec:傳入一個字符串,返回匹配結果的數組;
3.檢索實例下面根據目前常用的表單驗證時用到的正則,給出幾個檢索的案例;解;
3.1 手機號碼檢索
function isPhoneNum(str){ //020-80723000 //07518869865 //13832132341 var regExp = /^0d{2}[-]?d{8}|^0d{3}[-]?d{7}|^1d{10}/ return regExp.test(str); };
3.2 E-mail檢索
function isEmail(str){ var regExp = /^[a-zA-Z]w*@[0-9a-zA-Z]+.[a-zA-Z]+/; return regExp.test(str) };
3.3 密碼檢索
function isValidPassword(str){ //長度6-20個字符,包括大寫字母、小寫字母、數字、下劃線至少兩種 if(/W*/.test(str)){ return false }else if(/w{0,5}|w{21,}/.test(str)){ return false; }else if(/^d+$|^[a-zA-Z]$|^_+$/.test(str)){ return false }else{ return true; } }
3.4 用戶名的檢索
function isValidUsername(str){ //長度為6-20個字符,只能包括字母數字和下劃線 var regExp = /^w{6,20}$/ return regExp.test(str); };
3. 5 Url檢索
https://www.baidu.com:8080/index.html#q=hello https:// ([a-zA-Z]*://)? www.baidu.com S+ :8080 (:d*)? / / index.html S* #q=hello (#.*)?5. 小結
通過本文,我們可以了解到:
正則表達式可以理解為根據規定的規則,去檢索字符串然后根據匹配結果進行后續的處理,處理可以包括判斷、獲取和替換;
正則表達式的創建方法可以使用字面量和構造函數形式;兩種方法都是由正則模式和修飾符構成,不同之處在于構造函數需要以字符串形式傳參;
修飾符規則部分可以傳遞三個參數,分別為g、i和m,可以起到改變檢索規則的作用;
模式規則作為正則表達式,由普通字符和特殊字符構成;
普通字符包括打印字符和非打印字符;
特殊字符即那些具有特殊含義的字符,主要包括限定符、定位符、類型符、分組符、分組符、條件符、非獲取匹配符等;
正則表達式以實例形式出現時,擁有自己的屬性和方法,并且字符串的一些方法與正則表達式也存在密切的關系;
字符串的方法包括:match和replace方法;
正則實例的屬性和方法包括:ignonreCase、global、multiline、test和exec等;
最后給出了幾個正則表達式的應用實例,包括手機號碼、密碼、用戶名、E-mail和URL檢索;
參考資料《JavaScript高級程序設計(第3版)》
《JavaScript標準參考教程》——阮一峰
饑人谷課件
正則表達式30分鐘入門教程
菜鳥教程
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86742.html
摘要:目錄導語包裝對象的理解三大包裝對象的知識點小結導語包裝對象是為了彌補基本數據類型的非對象特性而產生的,對于基本類型值而言,本來是不存在屬性和方法的,但是我們可以在使用字面量創建字符串時,調用例如的方法,那么其內在原理究竟是什么呢閱讀完本篇文 目錄 導語 1. 包裝對象的理解 2. 三大包裝對象的知識點 3. 小結 導語 包裝對象是為了彌補基本數據類型的非對象特性而產生的,對于基本類型...
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...
摘要:本文的思想源自于在上的演講。我收集這些例子的主要目的是將它們整理并清楚理解它們的原理。著主要是因為大括號也是函數定義語法的一部分。自從年雙十一正式上線,累計處理了億錯誤事件,得到了金山軟件等眾多知名用戶的認可。 譯者按: JavaScript有很多坑,經常一不小心就要寫bug。 原文: What the f*ck JavaScript? 譯者: Fundebug 為了保證可讀性...
摘要:基本語法構造函數可創建一個正則表達式對象,用特定的模式匹配文本。要表示字符串,字面量形式不使用引號,而傳遞給構造函數的參數使用引號。當使用構造函數創造正則對象時,需要常規的字符轉義規則在前面加反斜杠。結果替換與正則表達式匹配的子串。 文章來源:小青年原創發布時間:2016-06-26關鍵詞:JavaScript,正則表達式,js模板引擎轉載需標注本文原始地址: http://zhaom...
摘要:一起來看看中的日期對象。對象和其他對象如等一樣,對象是語言中的內建對象。在工作中,對象有著許多重要的應用。這意味著,當前時間與標準時區相差小時。,全稱是國際標準化組織,負責制定全世界工商業國際標準的國際標準。 原文地址: http://www.wemlion.com/2016/d... 時間的發現 日常生活中,各種形式的時間字符到處都是。 時間觀念的產生,時間單位、計時工具的發明,給人...
閱讀 1315·2023-04-26 01:28
閱讀 2065·2021-11-08 13:28
閱讀 2315·2021-10-12 10:17
閱讀 2280·2021-09-28 09:46
閱讀 4140·2021-09-09 09:33
閱讀 3719·2021-09-04 16:40
閱讀 1076·2019-08-29 15:21
閱讀 2689·2019-08-26 17:17