JS中的RegExp對象
顯式構造函數,語法為:new RegExp("pattern"[,"flags"])。
隱式構造函數,語法為: /pattern/[flags]。
| index | 是當前表達式模式首次匹配內容的開始位置,從0開始計數。其初始值為-1,每次成功匹配時,index屬性都會隨之改變。 |
| input | 返回當前所作用的字符串,可以簡寫為$_,初始值為空字符串""。 |
| lastIndex | 是當前表達式模式首次匹配內容中最后一個字符的下一個位置,從0開始計數,常被作為繼續搜索時的起始位置,初始值為-1,表示從起始位置開始搜索,每次成功匹配時,lastIndex屬性值都會隨之改變。 |
| lastMatch | 是當前表達式模式的最后一個匹配字符串,可以簡寫為$&。其初始值為空字符串""。在每次成功匹配時,lastMatch屬性值都會隨之改變。 |
| lastParen | 如果表達式模式中有括起來的子匹配,是當前表達式模式中最后的子匹配所匹配到的子字符串,可以簡寫為$+。其初始值為空字符串""。每次成功匹配時,lastParen屬性值都會隨之改變。 |
| leftContext | 是當前表達式模式最后一個匹配字符串左邊的所有內容,可以簡寫為$`(其中“'”為鍵盤上“Esc”下邊的反單引號)。初始值為空字符串""。每次成功匹配時,其屬性值都會隨之改變。 |
| $1…$9 | 這些屬性是只讀的。如果表達式模式中有括起來的子匹配,$1…$9屬性值分別是第1個到第9個子匹配所捕獲到的內容。如果有超過9個以上的子匹配,$1…$9屬性分別對應最后的9個子匹配。在一個表達式模式中,可以指定任意多個帶括號的子匹配,但RegExp對象只能存儲最后的9個子匹配的結果。在RegExp實例對象的一些方法所返回的結果數組中,可以獲得所有圓括號內的子匹配結果。 |
| global | 返回創建RegExp對象實例時指定的global標志(g)的狀態。如果創建RegExp對象實例時設置了g標志,該屬性返回True,否則返回False,默認值為False。 |
| ignoreCase | 返回創建RegExp對象實例時指定的ignoreCase標志(i)的狀態。如果創建RegExp對象實例時設置了i標志,該屬性返回True,否則返回False,默認值為False。 |
| multiLine | 返回創建RegExp對象實例時指定的multiLine標志(m)的狀態。如果創建RegExp對象實例時設置了m標志,該屬性返回True,否則返回False,默認值為False。 |
| source | 返回創建RegExp對象實例時指定的表達式文本字符串。 |
| exec | 語法格式為exec(str)。該方法使用創建RegExp對象實例時所指定的表達式模式對一個字符串進行搜索,并返回一個包含搜索結果的數組。 如果為正則表達式設置了全局標志(g),可以通過多次調用exec和test方法在字符串中進行連續搜索,每次都是從RegExp對象的lastIndex屬性值指定的位置開始搜索字符串。 如果沒有設置全局標志(g),則exec和test方法忽略RegExp對象的lastIndex屬性值,從字符串的起始位置開始搜索。如果exec方法沒有找到匹配,返回值為null;如果找到匹配,則返回一個數組,并更新RegExp對象中有關靜態屬性以反映匹配情況。返回數組中的元素0包含了完整的匹配結果,而元素1~n依次是表達式模式中定義的各個子匹配的結果。 |
| test | 語法格式為test(str)。該方法檢查一個字符串中是否存在創建RegExp對象實例時所指定的表達式模式,如果存在就返回True,否則返回False。 如果找到匹配項,則會更新RegExp對象中的有關靜態屬性,以反映匹配情況。 |
| compile | 語法格式為compile("pattern"[,"flags"])。該方法可以更換RegExp對象實例所使用的表達式模式,并將新的表達式模式編譯為內部格式,從而使以后的匹配過程執行更快。 |
默認情況下,正則表達式使用最長(也叫貪婪)匹配原則.當?緊隨其它限定符(*、+、?、{n}、{n,}、{n,m})之后時,匹配模式變成使用最短(也叫非貪婪)匹配原則.
分組組合符就是將正則表達式中的某一部分內容組合起來的符號,反向引用符則是用于匹配前面的分組組合所捕獲到的內容標識符號
(1) (pattern)將圓括號中的pattern部分組合成一個可統一操作的組合項和子匹配,每個捕獲
的子匹配項按照它們在正則表達式模式中從左到右出現的順序存儲在緩沖區中.緩沖區從1開始編號,最多可存儲99個子匹配捕獲的內容.存儲在緩沖區中的子匹配捕獲的內容,可以在編程語言中被檢索,也可以在正則表達式中被反向引用.若要匹配字面意義的括號字符"("和")",在正則表達式中要分別使用"/(" 和"/)".
(2) /num匹配編號為num的緩沖區所保存的內容,此處的num是一個標識特定緩沖區的一位或兩位十進制正整數,這種方式稱為子匹配的反向引用.反向引用最有用的應用之一就是能提供表示相同匹配項的能力,例如,要匹配連續的5個數字字符,可以使用/d{5}作為正則表達式文本,它可以匹配12345,但是, 要匹配連續的5個相同的數字字符,如55555、11111等,需要使用(/d)/1{4}作為正則表達式文本,/1表示與前面(/d)所捕獲的內容一樣,/1{4}則表示前面的(/d)所捕獲的內容還連續出現4次.又例如,要匹配"Is is the cost of of gasoline going up up?"中所有連續重復的單詞部分,可以使用//b([a-z]+)/1/b/gi作為正則表達式文本.
(3) (?:pattern) 將圓括號中的pattern部分組合成一個可統一操作的組合項,但不把這部分內容當作子匹配捕獲,即pattern部分是一個非捕獲匹配,它匹配的內容不存儲在緩沖區中供以后使用.這對必須進行組合、但又不想讓組合的部分具有子匹配特點的情況很有用.
(4) (?=pattern)稱為正向"預測先行"匹配,在被搜索字符串的相應位置必須有pattern部分匹配的內容,但這部分匹配的內容不作為匹配結果處理,更不會被存儲在捕獲緩沖區中供以后使用.(?=pattern)必須位于一個正則表達式模式的最前或最后面.
(5) (?!pattern)稱為反向"預測先行"匹配,在被搜索的字符串的相應位置不能有pattern部分匹配的內容,除此之外,功能與正向"預測先行"匹配一樣.
新聞熱點
疑難解答