摘要:引用就是允許在同一個正則表達式的后部引用前面的子表達式。這個數字制定了帶圓括號的子表達式在正則表達式中的位置。對正則表達式中前一個子表達式的引用,并不是指對子表達式模式的引用,而是指與那個模式匹配的文本的引用。
前言
本文主要是在讀《JavaScript高級程序語言設計》一書有關正則表達式的章節的知識點記錄,方便后續查閱。
什么是正則表達式正則表達式是用來描述字符組合的某種規則。它可以幫助驗證字符串是否滿足某種字符組合規則或者通過某個規則查找對應的字符序列。
JavaScript中定義正則表達式對象舉個例子:比如我想驗證一個輸入框中輸入的是否是手機號碼,那么我們需要為這個輸入框定義一個輸入規則,比如11位字符、每個字符都必須是0-9、以及更細節的信息像第一位不能是0等規則。此時我們就可以定義一個正則表達式,將所有的規則通過正則表達出來,去驗證輸入框的內容是否滿足正則表達式定義的規則。
JavaScript中的正則表達式對象有兩種定義方式:正則表達式直接量和RegExp()構造函數。定義代碼如下:
//定義JavaScript正則對象的兩種方式 var pattern = /s$/; var pattern = new RegExp("s$");直接量字符
??正則表達式中所有字母和數字都是按字面含義進行匹配的,例如"a"就可以匹配到"a"字符。
??JavaScript也支持非字母的字符匹配。正則表達式通過””+字母的形式將字母原先的含義進行了轉義來表示其他特殊的字符。例如
匹配換行符。
??正則表達式中很多符號具有特殊含義:^ $ . * + ? = ! : | / () [] {}。如果想要匹配這些字符需要使用""進行轉義。
??現在我們知道我們可以用a去匹配a字符,b去匹配b字符。那么如果我需要匹配所有的小寫字母該怎么做?
??正則表達式使用[]來構造一個字符類。一個字符類可以匹配它所包含的任意一個字符。例如/[abc]/就能夠匹配字母”a”、”b”或”c”中的任意一個。另外在字符類中使用^可以進行否定操作,例如"/[^abc]/"表示匹配”a”、”b”或”c”以外的任意一個字符。
??字符類還可以使用連字符表示字符范圍,例如/[a-z]/匹配所有小寫字母。由于某些字符類非常常用,所以正則規范了一些特殊字符表示一個特定的字符類,例如/w/等價于[a-zA-Z0-9]。
??現在我們有有了新的需求,就是想要某個字符類匹配多次,例如匹配5-7個數字,可以使用/d{5,7}/進行匹配,由于某些重復種類非常常用,所以正則規范了特殊符號來表示,例如”+”表示匹配1次或多次,等價于{1,}等。
非貪婪的重復??使用重復進行匹配時會盡可能多的進行匹配,我們稱之為貪婪匹配。例如/a+/可以匹配一個或多個連續的字母a,當使用”aaa”作為匹配字符串時,正則表達式會匹配連續的三個a。
非貪婪匹配只需在待匹配字符后跟隨一個?,例如:”??”、”+?”、”*?”或”{1,5}?”。例如/a+?/也可以匹配一個或多個連續的字母a,但是它會盡可能少的匹配。
??選擇:字符”|”用于分隔可選擇的字符,例如/d{3}|[a-z]{4}/可以匹配三位數字或者四個小寫字母。選擇項的嘗試匹配次序是從左到右的,而且發現匹配項后就會忽略后面的選擇項。因此正則/a|ab/匹配字符串”ab”時只會匹配到第一個字母a。
分組??將子表達式組合成一個獨立單元,這就可以使用”|”、”*”等來對這個單元進行處理。例如/Java(script)?/可以用來匹配java或javascript,也就是script這個組合可以出現0-1次。
引用??()小括號除了可以將子表達式組合成一個獨立單元,還能夠定義子模式。當一個正則表達式成功地和目標字符串匹配時,可以從目標字符串中提取出和圓括號中的子模式相匹配的部分。后面會進行詳細介紹。
??引用就是允許在同一個正則表達式的后部引用前面的子表達式。這是通過在字符””后加一個數字來實現的。這個數字制定了帶圓括號的子表達式在正則表達式中的位置。這個位置是參與計數的左括號的位置。例如/([Jj]ava([Ss]cript)?)siss(funw*)/正則中([Ss]cript)可以使用2來指代。對正則表達式中前一個子表達式的引用,并不是指對子表達式模式的引用,而是指與那個模式匹配的文本的引用。這樣,引用可以用于實施一條約束,即一個字符串各個多帶帶部分包含的是完全相同的字符。例如/‘”[‘”]/匹配位于單引號或雙引號之間的0個或多個字符,但是它并不要求左側和右側的引號匹配,如果要匹配左右的引號類型,可以使用引用/([‘”])[w]1/。
??如果不想生成帶編碼的引用,可以使用”(?:)”進行組合,不記憶與改組相匹配的字符。
??有一些正則表達式的元素匹配的是字符之間的位置,而不是實際字符。例如b匹配一個單詞的邊界。有時稱這些元素為正則表達式的錨,因為它們將模式定位在目標字符串的特定位置上。最常見的錨元素是^,用來匹配字符串的開始,錨元素$用來匹配字符串的結尾。
??任何正則表達式都可以作為錨點條件,如果在符號”(?=”和”)”之間加入一個表達式,它就是一個先行斷言。用來說明圓括號內的表達式必須正確匹配。比如要匹配一個程序設計語言的名字,但只在其后有冒號時才匹配,可以使用/[jJ]ava([sS]cript)?(?=:)/。
??帶有”(?!”和”)”的斷言是負向先行斷言。用以指定接下來的字符都不匹配。例如/Java(?!Script)([A-Z]w*)/,用來匹配Java后面跟一個大寫字母和任意個ASCII單詞,但Java后面不能跟隨”Script”。
??修飾符用來說明高級匹配模式的規則。JavaScript支持3個修飾符:i、g和m。
i:修飾符”i”用以說明模式匹配是不區分大小寫的。
g:修飾符”g”用以說明模式匹配是全局的,也就是應該檢索出字符串中的所有匹配。
m:修飾符”m”用以說明在多行模式中執行匹配。在這種模式下,如果待檢索的字符串包含多行,那么^和錨字符除了匹配整個字符串的開始和結尾之外,還能夠匹配每行的開始和結尾。比如/java/im可以匹配”Java”,也可以匹配”java is fun”。
String類型用于模式匹配的方法??JavaScript的String類型支持4種使用正則表達式的方法。
search():接收一個參數(字符串類型或者是正則對象),返回值是stringObject 中第一個與 regexp 相匹配的子串的起始位置。
replace():replace() 方法用于在字符串中用一些字符替換另一些字符,或替換一個與正則表達式匹配的子串。該方法接收兩個參數,第一個參數規定子字符串或要替換的模式的 RegExp 對象。第二個參數接收一個字符串值。規定了替換文本或生成替換文本的函數。如果正則表達式設置了修飾符g,那么源字符串中所有與模式匹配的子字符串都將被替換。但replace()的功能遠不止單純的替換,正則表達式中可以使用圓括號創建子表達式,正則表達式會記憶與每個子表達式匹配的文本。如果在替換字符串中出現了$加數字,那么replace()將與指定的子表達式相匹配的文本來替換。replace()的第二個參數可以接收一個函數來動態計算替換字符串。
match():match()方法可在字符串內檢索指定的值,或找到一個或多個正則表達式的匹配。該方法類似 indexOf() 和 lastIndexOf(),但是它返回指定的值,而不是字符串的位置。如果設置了修飾符g,則返回所有匹配結果。沒有設置則只檢索第一個匹配。即使不是全局搜索,也會返回一個數組,這種情況下,數組的第一個元素是匹配的字符串,余下的是子表達式對應的字符串。參數傳入字符串相當于傳入了一個非全局的正則表達式。
split():split() 方法用于把一個字符串分割成字符串數組。語法是stringObject.split(separator,howmany),separator可以是字符串或正則表達式,從該參數指定的地方分割 stringObject。howmany可選。該參數可指定返回的數組的最大長度。如果設置了該參數,返回的子串不會多于這個參數指定的數組。如果沒有設置該參數,整個字符串都會被分割,不考慮它的長度。
RegExp對象??創建RegExp對象時接收兩個參數:正則字符串和修飾符。
//注意""需要使用""進行表示 var zipcode = new RegExp("d{5}", g);RegExp的屬性
??每個RegExp對象都包含5個屬性。
source:是一個只讀字符串,包含正則表達式的文本。
global:用來說明這個正則表達式是否帶有修飾符g
ignoreCase:用來說明正則表達式是否帶有修飾符i
multiline:用來說明正則表達式是否帶有修飾符m
lastIndex:這是一個可讀寫的整數。如果匹配模式帶有g修飾符,這個屬性存儲整個字符串中下一次檢索的開始位置,這個屬性會被exec()和test()方法用到。
RegExp的方法??RegExp對象定義了兩個用于執行模式匹配的操作方法。
exec():exec()接收一個字符串參數,方法的作用就是在參數字符串中執行匹配檢索。如果它沒有找到匹配就返回true。但如果它找到了匹配,它將返回一個數組,這個數組的第一個元素包含的是與正則表達式相匹配的字符串,余下的元素是與圓括號內的子表達式相匹配的子串。屬性index包含了發生匹配的字符串位置,屬性input引用的是正在執行檢索的字符串。exec()總是返回一個匹配結果,并提供本次匹配的所有相關信息。當調用exec()的正則表達式對象具有g修飾符時,它將把正則表達式對象的lastIndex屬性設置為緊挨著匹配子串的字符位置。當再次調用exec()時,它將從字符串的lastIndex位置開始向后進行檢索。如果exec()沒有查詢到結果,它將把lastIndex設置為0.
test():test()的運行機制和exec()一致,只不過它只返回true和false
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86532.html
摘要:選擇分組和引用正則表達式的語法還包括指定選擇項子表達式分組和引用前一子表達式的特殊字符。帶圓括號的表達式的另一個用途是允許在同一正則表達式的后部引用前面的子表達式。 正則表達式(regular expression)是一個描述字符模式的對象。JavaScript的 RegExp類 表示正則表達式,String和RegExp都定義了方法,后者使用正則表達式進 行強大的模式匹配和文本檢索與...
摘要:如果遇到非常的復雜的匹配,正則表達式的優勢就更加明顯了。關于正則表達式書寫規則,可查看,上面說的很清楚了,我就不貼出來了。替換與正則表達式匹配的子串,并返回替換后的字符串。結語正則表達式并不難,懂了其中的套路之后,一切都變得簡單了。 前言 在正文開始前,先說說正則表達式是什么,為什么要用正則表達式?正則表達式在我個人看來就是一個瀏覽器可以識別的規則,有了這個規則,瀏覽器就可以幫我們判斷...
摘要:正則表達式的意義中的正則表達式使用表示,可以使用構造函數來創建對象,不過對象更多的是通過一種特殊的直接量語法來創建。用構造函數也可以定義一個與之等價的正則表達式,代碼如下正則表達式的模式規則是由一個字符序列組成的。 正則表達式的模式匹配 正則表達式(regular expression)是一個描述字符模式的對象。javascript的RegExp對象表示正則表達式,String和Reg...
Javascript的正則表達式是前端中比較重要的部分,正則表達式主要用于字符串處理,表單驗證等場合,實用高效,文章主要對JavaScript中的正則的學習與總結 正則表達式的定義 正則表達式:是一個描述字符模式的對象,JavaScrip中正則表達式用RegExp對象表示,可以使用RegExp構造函數來創建正則對象 正則表達式的創建 1.字面量創建 var reg = /[a-z]/; 2.構...
摘要:返回是一個只讀的布爾值,看這個正則表達式是否帶有修飾符。方法,它的參數是一個字符串,用對某個字符串進行檢測,如果包含正則表達式的一個匹配結果,則返回,否則返回。總結這次主要是說說,中正則表達式對象的個屬性,而最需要注意的就是屬性了。 說明 這篇文章,主要和大家聊聊JavaScript中RegExp對象的屬性。 解釋 每個RegExp對象都包含5個屬性,source、global、ign...
閱讀 2659·2021-11-23 09:51
閱讀 3251·2021-11-22 14:44
閱讀 4579·2021-11-22 09:34
閱讀 5117·2021-10-08 10:14
閱讀 2426·2021-09-22 15:47
閱讀 3510·2021-09-22 15:40
閱讀 1515·2019-08-30 15:44
閱讀 1624·2019-08-28 18:23