一、什麼是正則表達式(regular expression)
<code>1) 正則表達式是一描述字符模式的對象;
2) 可以處理更復雜的字符串;
3) javaScript中的正則表達式使用RegExp對象表示;
4)正則表達式用於對字符串模式匹配及檢索替換,是對字符串執行模式匹配的工具;/<code>
1.語法:var patt=new RegExp(pattem,modifiers) 動態創建表達式
Var patt=/patterm/modifiers;
2.參數:pattern:描述表達式模式
Modifiers:用於指定全局匹配、區分大小寫的匹配和多行匹配;
3.常用修飾符:用於執行區分大小寫和全局匹配
<code>1)i 執行對大小寫不敏感的匹配;
2)g 執行全局匹配(查找所有匹配而非在找到第一個匹配後停止);
3)m 執行多行匹配/<code>
4.方括號:用於查找某個範圍內的字符
<code> 1)[abc]:查找方括號之間的字符;
2)[^abc]:查找任何不在方括號之間的字符;
3)[0-9]:查找任何從0至9的數字;
4)[a-z]:查找任何從小寫a到小寫z的字符;
5)[A-Z]:查找任何從大寫A到大寫Z的字符;
6)[A-z]:查找任何從大寫A到小寫z的字符;
7)[adgk]查找給定集合內的 任何字符;
8)[^adgk]:查找給定集合外的任何字符;
9)(red|blue|green):查找任何指定的選項;/<code>
5.元字符:(Metacharacter)是擁有特殊含義的字符;
<code> 1). :查找單個字符,除了換行和結束符;
2)\\w:查找單詞字符;
3)\\W:查找非單詞字符;
4)\\d:查找數字;
5)\\D:查找非數字字符;
6)\\s:查找空白字符;
7)\\S:查找非空白字符;
8)\\b:匹配單詞邊界;
9)\\B:匹配非單詞邊界;
10)\\0:查找NUL字符;
11)\\n:查找換行符;
12)\\f:查找換頁符;
13)\\r:查找回車符;
14)\\t:查找製表符;
15)\\v:查找垂直製表符;
16)\\\\xxx:查找以八進制數xxx規定的字符;
17)\\\\xdd:查找以十六進制數dd規定的字符;
18)\\\\uxxxx:查找以十六進制數xxxx規定的Unicode字符;/<code>
6.量詞:
<code> 1)n+:匹配任何包含至少一個n的字符串;
2)n*:匹配任何包含零個或多個n的字符串;
3)n?:匹配任何包含零個或一個n的字符串;
4)n{x}:匹配包含X個n的序列的字符串;
5)n{X,Y}:匹配包含X或Y個n的序列的字符串;
6)n{X}:匹配包含至少X個n的;
7)n$:匹配任何結尾為n的字符串;
8)^n:匹配任何開頭為n的字符串;
9)?=n:匹配任何其後緊接指定字符串n的字符串;
10)?!n:匹配任何其後沒有緊接指定字符串n的字符串;
/<code>
二、正則對象方法:
1.RegExp對象
<code>1)compile(編譯)
語法:ReExpObject.compile(regexp,modifier)
參數:regexp:正則表達式 modifier:模式修飾符;
Compile:用於在腳本執行過程中編譯正則表達式或改變和重新編譯正則表達式/<code>
<code>2)exec:在目標字符串中執行一次正則匹配操作,並將結果以數組的形式返回,每次執行 exec()函數都只查找最多一個匹配並返回
語法:RegExpObjec.exec(string)
參數:string指定的字符串;/<code>
注:~如果為正則表達式設置了全局標誌(g),exec()函數仍然只返回最多一個匹配,不過我們再次調用該對象的exec()函數就可以查找並返回下一個匹配;
~如果為正則表達式設置了全局標識g,test函數仍然只查找最多一個匹配,不過我們再次調用該對象的test函數就可以查找下一個匹配;
~如果regExpObject帶有全局標誌g,test()函數不是從字符串的開頭開始查找,而是從屬性regExpObject.lastIndex所指定的索引處開始查找該屬性值默認為0,所以第一次仍熱按是從字符串的開頭查找。當找到一個匹配是,test()函數會將regExpObject.lastIndex的值改為字符串中能夠本次匹配內容的最後一個字符的下一個索引位置,當再次執行test()函數是,將會從該索引位置處開始查找,從而找到下一個匹配。
~當我們使用test()函數執行了一次匹配之後,如果想要重新使用test()函數從頭開始查找,則需要手動將regExpObject.lastIndex的值重置為0,如果test()函數在也找不到可以匹配的文本時,該函數會自動把regExpObject.lastIndex屬性重置為0
<code>3)test(測試):檢測字符串中是否存在正則表達式模式對應的匹配,返回值布爾型;
語法: regExpObject.test(str)
參數:string指定的字符串/<code>
注:每次執行test函數都只查找最多一個匹配,找到返回true,否則false
2.正則表達式string對象的方法:如果匹配成功,則search()返回正則表達式在字符串中首次匹配項的索引,否則,返回
<code>1)search(搜索):如果匹配成功,則search()返回正則表達式在字符串中首次匹配項的索引,否則,返回-1
語法:str,search(regexp)
參數:regexp一個正則表達式對象,如果傳入一個非正則表達式對象,則會使用new RexExp(obj)隱式地將其轉換為正則表達式/<code>
注:~~想知道字符串中是否建甌存在某個模式(pattem)時可使用search,類似於正則表達式的test方法
~~瞭解更多匹配信息是,可使用match(會更慢),該方法類似於正則表達式的exec方法
<code>2)match:當字符串匹配到正則表達式(regular expression)時,match()方法會提取匹配項,如果找到返回匹配結果的數組,如果沒有匹配項,則返回null
語法:str,match(regexp)
參數:regexp一個正則表達式對象,如果傳入一個非正則表達式對象,則會隱式地使用new RegExp(obj)將其轉換為正則表達式對象/<code>
<code> 3)replace(替換):replace()方法使用一個替換值(replacement)替換掉一個匹配模式(pattem)在原字符串中某些或所有的匹配項,並返回替換後的字符串。這個替換模式可以是字符串或者RegExp(正則表達式),替換值可以是一個字符串或者一個函數
語法:str.replace(regexp|substr,newSubStr|function)
參數:regexp,一個RegExp對象,該正則所匹配的內容會被第二個參數的返回值替換掉
Substr:一個要被newSubSTR替換的字符串
newSubStr:替換掉第一個參數在原字符串中的匹配部分,該字符串中可以內插一些特殊的變量名
function:一個用來創建新字符串的函數,該函數的返回值將替換掉第一個參數匹配到的結果注:~~該方法並不改變調用它的字符串本身,而只是返回替換後的字符串
~~在進行全局的搜索替換時,第一個參數要麼是包含g標誌的正則表達式,要麼是包含g標誌的字符串;/<code>
<code>4)split(分割):split()方法通過吧字符串分割成字符串來把一個String對象分割成一個字符串數組
語法:str.split([separator][,limit])
參數:separator,指定用來分割字符串的字符,separator可以是一個字符串或正則表達式,如果忽略separator,則返回的數組包含一個由原字符串組成的元素,如果separator是一個空字符串,則str將會轉換成一個由原字符串中字符組成的數組;
Limit:一個整數,限定返回的分割片段數量,split方法仍然分割每一個匹配的sepparator,單數返回的數組只會截取最多limit個元素/<code>
注:~~當找到一個seperator時,sparator會從字符串中被移除,返回存進一個數組當中的字符串,如果忽略separator參數,則返回的數組包含一個元素,該元素是原字符串,如果separator是一個空字符串,則str將被轉換為由字符串中字符組成的數組
~~如果separator是一個正則表達式,且包含捕獲括號(capturing parentheses),則每次匹配到separator時,捕獲括號匹配的結果將會插入到返回的數組中。
還有,既然學習了正則表達式,就千萬不要忘記這一個用法:
閱讀更多 歆語 的文章