g 代表全域匹配
m 代表可以進行多行匹配
i 代表不區分大小寫匹配
^ 符合輸入字串的開始位置
$ 匹配輸入字串的結束位置
* 符合前面的子表達式零次或多次. 等價於{0,}
+ 符合前面的子表達式一次或多次. 等價於{1,}
? 匹配前面的子表達式零次或一次. 等價於[0,1} , 當該字元跟在任何一個其他限制符(*, +, ?, {n}, {n,}, {n, m}) 後面時,配對模式是非貪婪的。非貪婪模式盡可能少的匹配所搜尋的字串,而預設的貪婪模式則盡可能多的匹配所搜尋的字串。例如,對於字串"oooo",'o+?' 將匹配單一"o",而'o+' 將匹配所有'o'。
d 符合一個數字字元. 等價於[0-9]
D 符合一個非數字符. 等價於[^0-9]
w ,等價於"[A-Za-z0-9_]"
W 匹配任何非單字字元,等價於"[^A-Za-z0-9]"
s 符合任何空白字元, 包含空格製表符換頁符等等. 等價於[fnrtv]
S 符合任何非空白字元. 等價於[^frntv]
b 符合一個字邊界,也就是指字和空格間的位置。
B 符合非單字邊界。
(pattern)匹配pattern 並取得此匹配。所取得的匹配可以從產生的Matches 集合得到,在VBScript 中使用SubMatches 集合,在JScript 中則使用$0…$9 屬性。
(?:pattern)匹配pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲以供以後使用。這在使用"或" 字元(|) 來組合一個模式的各個部分是很有用。例如, 'industr(?:y|ies) 就是一個比'industry|industries' 更簡略的表達式。
(?=pattern)正向預查,在任何符合pattern 的字串開始處符合查找字串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如, 'Windows (?=95|98|NT|2000)' 能符合"Windows 2000" 中的"Windows" ,但不能符合"Windows 3.1" 中的"Windows"。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字符之後開始。
(?!pattern)負向預查,在任何不符合Negative lookahead matches the search string at any point where a string not matching pattern 的字串開始處匹配查找字串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以後使用。例如'Windows (?!95|98|NT|2000)' 能符合"Windows 3.1" 中的"Windows",但不能符合"Windows 2000" 中的"Windows"。預查不消耗字符,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜索,而不是從包含預查的字符之後開始
匹配2-4個漢字
程序代碼
/^[u4e00-u9fa5]{2,4}$/g;
符合6到18個(字母,數字,底線)字元
程式碼
/^w{6,18}$/;
程式碼
/^[A-Za-z0-9_]$/;
符合HTML標籤
程式碼
/<[^>]*>|</[^>]*>/gm;
程式碼
/</?[^>]+>/gm;
匹配左右兩端的空格
程式碼
/(^s*)|(s*$)/g;
優先順序(從高到低)
轉義符
(),(?:),(?=),[] 圓括號和方括號
* , + , ? , {n} , {n,} , {n,m} 限定符
^ , [vapour:content]nbsp; 位置與順序
| "或"操作會
符合兩個連續的以空格分開的相同單字
程式碼
/b([az]+) 1b/gim ;
在這個範例中,子運算式就是圓括號之間的每一項。
所捕獲的表達式包括一個或多個字母字符,即由'[az]+' 所指定的。
這個正規表示式的第二部分是對前面所捕獲的子匹配的引用,也就是由附加表達式所匹配的第二次出現的單字。
'1'用來指定第一個子符合。單字邊界元字元確保只偵測單獨的單字。
如果不這樣,則諸如"is issued" 或"this is" 這樣的短語都會被該表達式不正確地識別。
程式碼
var ss = "Is is the cost of of gasoline going up up?. Is is the cost of of gasoline going up up?.";
var re = /b([az]+) 1b/gim;
var rv = ss.replace(re,"$1");
document.write(rv) //輸出"Is the cost of gasoline going up?. Is the cost of gasoline going up?. "
程式碼
/bCha/
匹配單字'Chapter' 的前三個字符,因為它們出現在單字邊界後
程式碼
/terb/
匹配單字'Chapter' 中的'ter',因為它出現在單字邊界之前
程式碼
/Bapt/
匹配'apt',因為它位於'Chapter' 中間,但不會匹配'aptitude' 中的'apt',因為它位於單字邊界後
*/
匹配URL地址
程序代碼
/(w+)://([^/:]+)(:d*)?([^#]*)/
將下述的URI 分解為協議(ftp, http, etc),網域名稱地址以及頁面/路徑:
http://msdn.microsoft.com:80/scripting/default.htm
第一個附加子運算式是用來擷取該web 位址的協定部分。此子表達式匹配位於一個冒號和兩個正斜杠之前的任何單字。第二個附加子表達式會擷取該位址的網域名稱位址。此子表達式匹配不包括'^'、 '/' 或':' 字元的任何字元序列。第三個附加子表達式會擷取網站連接埠號碼,如果指定了該連接埠號碼。此子表達式會比對一個冒號的零或多個數字。最後,第四個附加子表達式會擷取由該web 位址指定的路徑以及或頁面資訊。此子表達式會匹配一個和多個除'#' 或空格之外的字元。
將此正規表示式套用至上述所示的URI 後,子符合包含下述內容:
RegExp.$1 包含"http"
RegExp.$2 包含"msdn.microsoft.com"
RegExp.$3 包含":80"
RegExp.$4包含"/scripting/default.htm"
正規表示式的方法
1 test方法
傳回一個Boolean值,它指出在被尋找的字串中是否存在模式
rgExp.test(str)
全域RegExp物件的屬性不由test方法來修改
example1
http://www.knowsky.com/
程式碼
var url=" http://msdn.microsoft.com:80/scripting/default.html ";
var reg=/(w+)://([^/:]+)(:d*)?([^#]*)/;
var flag=reg.test(url);
flag //回傳true
RegExp.$1 //返回"http"
RegExp.$2 //返回"msdn.microsoft.com"
RegExp.$3 //返回":80"
$egExp.$4 //返回"/scripting/default.html"
search和test方法都不能更新全域RegExp對象,所以RegExp.input,RegExp.index,RegExp.lastIndex返回undefined
2 match 方法
使用正規表示式模式對字串執行查找,並將包含查找的結果作為數組返回
程式碼
stringObj.match(rgExp)
如果match方法沒有找到匹配,則回傳null。如果找到符合傳回一個陣列並且更新全域RegExp物件的屬性以反映符合結果。
match方法傳回的陣列有三個屬性:input、index和lastIndex。
Input屬性包含整個的被尋找的字串。
Index屬性包含了在整個被尋找字串中符合的子字串的位置。
LastIndex屬性包含了最後一次符合中最後一個字元的下一個位置。
如果沒有設定全域標誌(g),數組的0元素包含整個匹配,而第1到n元素包含了匹配中曾出現過的任一個子匹配。
這相當於沒有設定全域標誌的exec方法。如果設定了全域標誌,元素0到n包含所有符合
example1(沒有設定全域標誌)
程式碼
var url=" http://msdn.microsoft.com:80/scripting/default.html ";
var reg=/(w+)://([^/:]+)(:d*)?([^#]*)/;
var myArray=url.match(reg);
RegExp.$1 //返回"http"
RegExp.$2 //返回"msdn.microsoft.com"
RegExp.$3 //返回":80"
$egExp.$4 //返回"/scripting/default.html"
myArray //返回myArray[0]=" http://msdn.microsoft.com:80/scripting/default.html ",
myArray[1]="http",myArray[2]="msdn.microsoft.com",
myArray[3]=":80",myArray[4]="/scripting/default.html"
myArray.input //返回「http://msdn.microsoft.com:80/scripting/default.html"
myArray.index //回傳0
myArray.lastIndex //返回51
example2(設定了全域標誌)
程式碼
var url=" http://msdn.microsoft.com:80/scripting/default.html ";
var reg=/(w+)://([^/:]+)(:d*)?([^#]*)/g;
var myArray=url.match(reg);
RegExp.$1 //返回"http"
RegExp.$2 //返回"msdn.microsoft.com"
RegExp.$3 //返回":80"
$egExp.$4 //返回"/scripting/default.html"
myArray //返回myArray=" http://msdn.microsoft.com:80/scripting/default.html "
myArray.input //返回「http://msdn.microsoft.com:80/scripting/default.html"
myArray.index //回傳0
myArray.lastIndex //返回51
注意設定了全域標誌後區別
如果沒有設定全域標誌(g),數組的0元素包含整個匹配,而第1到n元素包含了匹配中曾出現過的任一個子匹配。
這相當於沒有設定全域標誌的exec方法。如果設定了全域標誌,元素0到n包含所有符合
3 exex方法
以正規表示式模式在字串中執行查找,並傳回包含該查找結果的一個陣列。
程式碼
rgExp.exec(str)
如果exec方法沒有找到匹配,則它會傳回null。
如果它找到匹配,則exec方法傳回數組,並且更新全域RegExp物件的屬性,以反映匹配結果。
陣列的0元素包含了完整的匹配,而第1到n元素中包含的是匹配中出現的任一個子匹配。
這相當於沒有設定全域標誌(g)的match方法。
如果為正規表示式設定了全域標誌,exec從以lastIndex的值指示的位置開始尋找。
如果沒有設定全域標誌,exec忽略lastIndex的值,從字串的起始位置開始搜尋。
exec方法傳回的陣列有三個屬性,分別是input、index、lastIndex。
Input屬性包含了整個被尋找的字串。
Index屬性中包含了整個被尋找字串中被匹配的子字串的位置。
LastIndex屬性中包含了符合中最後一個字元的下一個位置。
example1(沒有設定全域標誌)
程式碼
var url=" http://msdn.microsoft.com:80/scripting/default.html ";
var reg=/(w+)://([^/:]+)(:d*)?([^#]*)/;
var myArray=reg.exec(url);
RegExp.$1 //返回"http"
RegExp.$2 //返回"msdn.microsoft.com"
RegExp.$3 //返回":80"
$egExp.$4 //返回"/scripting/default.html"
myArray //返回myArray[0]=" http://msdn.microsoft.com:80/scripting/default.html ",
myArray[1]="http",myArray[2]="msdn.microsoft.com",
myArray[3]=":80",myArray[4]="/scripting/default.html"
myArray.input //返回「http://msdn.microsoft.com:80/scripting/default.html"
myArray.index //回傳0
myArray.lastIndex //返回51
沒有設定全域標誌(g)時,match方法和exec方法相同
example2(設定全域標誌)
程式碼
var url=" http://msdn.microsoft.com:80/scripting/default.html ";
var reg=/(w+)://([^/:]+)(:d*)?([^#]*)/;
var myArray=reg.exec(url);
RegExp.$1 //返回"http"
RegExp.$2 //返回"msdn.microsoft.com"
RegExp.$3 //返回":80"
$egExp.$4 //返回"/scripting/default.html"
myArray //返回myArray[0]=" http://msdn.microsoft.com:80/scripting/default.html ",
myArray[1]="http",myArray[2]="msdn.microsoft.com",
myArray[3]=":80",myArray[4]="/scripting/default.html"
myArray.input //返回「http://msdn.microsoft.com:80/scripting/default.html"
myArray.index //回傳0
myArray.lastIndex //返回51
4 search方法
傳回與正規表示式查找內容相符的第一個子字串的位置。
程式碼
stringOjb.search(rgExp)
search方法指明是否存在對應的匹配。
如果找到一個匹配,search方法將傳回一個整數值,指明這個匹配距離字串開始的偏移位置。
如果沒有找到匹配,則返回-1。
example1
程式碼
var url=" http://msdn.microsoft.com:80/scripting/default.html ";
var reg=/(w+)://([^/:]+)(:d*)?([^#]*)/;
var flag=url.search(reg);
flag //回傳0
RegExp.$1 //返回"http"
RegExp.$2 //返回"msdn.microsoft.com"
RegExp.$3 //返回":80"
$egExp.$4 //返回"/scripting/default.html"
search和test方法都無法更新全域RegExp對象,所以RegExp.input,RegExp.index,RegExp.lastIndex回傳undefined
5 replace方法
傳回根據正規表示式進行文字替換後的字串的複製
能更新全域RegExp對象