JavaScript中的正則表達式簡介

JavaScript正則表達式:

正則表達式的字面語法格式

一個正則表達式的格式如下: 
/由字符、字符類、特殊字符類、分組符、位置指示符、轉義碼、重複計量器、可選量符號組成的字符串/正則表達式標記 
如:/^(http)[1-3]{2,4}\d\w$/ig 
正則表達式標記: 
這裏寫圖片描述

正則表達式位置指示符:規定模式在它所匹配的字符串裏的位置。 
這裏寫圖片描述

可以同時使用這兩個位置指示符來確保精確的匹配給定的模式,如:/^http$/ 將只匹配http。 
轉義碼: 
這裏寫圖片描述

用在正則表達式中的轉義碼是用在字符串中的轉義碼的超集(在正則表達式中有很多帶特殊含義的字符如^和$等)。

正則表達式的重複計量器:指定某個字符或字符組合可以或者必須出現的次數。 
這裏寫圖片描述

分組符”()”:在使用重複計量器時可以將字符用()組合起來作爲一個項目 
如:/a(34)+c/ 匹配任何含有一個a跟隨一個或者多個”34”再緊跟一個c的字符串。

字符類:

可以使用[]指定一個有效的字符集合 
如:/[123]/ 匹配任何含有1、2、3數字的字符串。

在[]中可以使用減號” - ”符指定取值範圍 
如: /[0-9a-z]/ 匹配任何含有數字和小寫字母的字符串

在[]中還可以使用” ^ ”來指定不能出現的字符類 
如:/[^a-zA-Z]/ 將匹配任何一個至少含有一個非字母字符的字符串

其他特殊字符類: 
這裏寫圖片描述

子表達式:正則表達式可以用”()”分組,用於RegExp對象自身來訪問子表達式成分 
如:var pattern = /(\w+) ([\d-]+)/; 
var customer = “Alan 555-2334”; 
pattern.test(customer); 
alert(“1=+RegExp.1 + “\n2=+RegExp.2); 
會顯示: 
” 1=Alan2= 555-2334” 
注意:根據ECMA的規定,可以訪問的子表達式不止9個,還可以用10,11……,一直達到99個之多,這主要取決於瀏覽器是否支持。 
可選量符號”|”:可以使用”|”來指示幾個條目的邏輯“或”關係

如:/^(http|ftp|https)/ 可以匹配以” http”、” ftp”或” https”開頭的字符串。 
/abc|(xyz){3}/ 匹配包含有” abc”或者” xyz xyz xyz”的字符串

一些常用正則表達式的例子:

/\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}/ 匹配如 125.0.0.2之類的ip地址 
/^(http|ftp|https):\/\/.*/ 匹配諸如 http://jdskfk之類的url地址 
/\w+@\w+.\w{1,3}/ 匹配諸如 [email protected]之類的email地址{1,3}表示後綴只可能是cn.,gov,com,org之類的域名後綴

RegExp對象

構造正則表達式的兩種方法:

1、 var pattern=/dsfdsf/i 
2、 var pattern= new RegExp(“dsfdsf”,”i”) 
RegExp對象的方法:

1、 test(“sjdalkfjlsd”)——-返回true或者false

2、 compile(“”,””)———–用新的正則表達式替代舊的正則表達式:不常用.

3、 exec(“dsafsda”)———-返回帶有很多屬性的數組:包括該數組的長度length;顯示輸入的原始字符串input;保存第一次匹配的索引的index;以及保存第一次匹配以後接下來的搜索開始處字符所對應的索引lastIndex。(從0開始計數)。例如: 
var pattern=/cat/; 
var result=pattern.exec(“he is a big cat,a fatjdfjlkdj”); 
則result=”cat”;result.length=1;result.index=12;result.lastIndex=15; 
result.input=” he is a big cat,a fatjdfjlkdj” 
如果不能匹配,則result=null; 
如果使用了子表達式,則返回的數組元素將不止一個。 
如: 
var pattern= /(cat)(and)(dog)/ 
var result=pattern.exec(“my cat and dog are black.”) 
則 result= cat and dog,cat,and,dog 
result.length=4;result.index=3;result.lastIndex=15; 
result.input= my cat and dog are black. 
注意:exec()方法將整個匹配的字符串放到返回數組的第一個元素,lastIndex屬性指向最後一個匹配的字符串的最後一個字符的下一個位置。 此外,exec()方法在執行全局匹配的時候只返回第一個匹配,所有,需要返回多個匹配的時候,最好使用後面所要介紹的String的match()方法.

RegExp對象的實例屬性 
這裏寫圖片描述

RegExp對象的靜態屬性(全局變量) 
這裏寫圖片描述

正則表達式的Stirng方法

search(): 返回第一個匹配的子字符串開始字符的索引或者-1(沒有找到任何匹配)

如:”javascript regular expressions are powerful!”.search(/pow.*/i)=35; 
而:”javascript regular expressions are powerful!”.search(/\d/i)=-1; 
split():將字符串分成子字符串,並以數組的形式返回

如:var string=”10/3//4/7/9”;var splitExp=/[\/]+/;myArray=string.split(splitExp); 
則myArray[0]=”10”; myArray[1]=”3”;……;myArray[4]=”9”;

replace():返回字符串,用第二個參數替換匹配第一個參數(一個正則表達式)的文本所得到的結果。可以指定是否全局匹配。

如:s=”hello.regexps are fun.”.replace(/./g,”!”)將返回”hello!regexps are fun!”. 
可用該方法實現自己的Trim方法,如: 
function Trim(inputStr){ return inputStr.replace(/(^\s*)|(\s*$)/g,”“); } 
match()方法:使用一個正則表達式爲爲參數,返回包含了匹配結果的數組。

如:var pattern=/\d{2}/g;var n=”22,33,33,33”;var result=n.match(pattren); 
則result[0]=”22”; …. result[3]=”33”; 
高級正則表達式:

/^.*$/gm:可以將一段多段落文字按換行符分解到幾個字符串裏。

如:var text=”this is a multiplane lines\n this is a 2nd lines\n this is a 3th lines” 
var lines=text.match(“/^.*$/gm”); 則 
lines[0]= ”this is a multiplane lines”; 
lines[1]= ”this is a 2nd lines”; 
lines[2]= ”this is a 3th lines”; 
(?:):規定加括號內的子表達式不能被捕獲。

如:var pattern=/(?:abc)(def)/ 
var text=”abcdef”.replace(pattern,”ksdkfj:$1”)將返回:”ksdkfj: def”; 
如果pattern=/(abc)(def)/則返回:” ksdkfj: abc”。

(?=):規定只有在某條目後面緊跟着包含在(?=)中的表達式時,纔會對前面的條目匹配。

如:var pattern=/\d(?=.\d+)/ 匹配”3.3 “、”3.14”,但不匹配”3”或”3.” 。 
(?!):與(?=)正好相反。

如:var pattern=/\d(?!.\d+)/匹配”3 “但不匹配”3.3 “,”3.14” 
正則表達式的侷限性:

1、 匹配要求的複雜性使得不可能滿足任意想要的匹配模式; 
2、 只能對語法而不能對語義的有效性進行驗證。例如:025-1234567是合法的電話號碼,但不一定是實際存在的電話號碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章