RegExp類是正則表達(dá)式類,它的構(gòu)造函數(shù)可以是2個(gè)或者1個(gè). 第一個(gè)參數(shù)是匹配的模式(字符串),第二個(gè)參數(shù)是是額外的處理指令.
它有2個(gè)方法用來匹配模式 test方法,比較常用,不做介紹.? exec方法,有一個(gè)參數(shù),即被匹配的字符串, 返回一個(gè)數(shù)組, 數(shù)組的第一個(gè)條目為第一個(gè)匹配字符串,其他的為反向引用.
String類的replace方法可以擴(kuò)展,也就是說方法的第一個(gè)參數(shù)是一個(gè)正則表達(dá)式,第二個(gè)數(shù)是一個(gè)替換的字符串.同時(shí)第二個(gè)參數(shù)可以一個(gè)方法function.例如:
var bb = "a bat,a cat,a fAt,a faT cat";
var reg = /at/gi;
alert(bb.replace(reg,function(sMatch){alert(sMatch); return "dog";}));
看看會(huì)輸出什么,^_^.
反向引用: 是按照從左到右遇到的作括號(hào)的順序進(jìn)行創(chuàng)建和編號(hào)的.例如:
var? sToMatch="#123456";
var reg=/#(\d+)/;
reg.test(sToMatch);
alert(RegExp.$1);?
輸出的是123456;
RegExp的實(shí)例屬性:
global:? bool值,用g表示 是否設(shè)置全局選項(xiàng).
ignoreCase:bool值,用i表示 是否忽略大小寫.
lastIndex:整數(shù),大表下次匹配將會(huì)從哪個(gè)字符位置開始(只有當(dāng)使用exec()或test()函數(shù)后才會(huì)填入,否則為0);
source: 增則表達(dá)式的原字符串形式.例如:/[bar]*/ 的source將返回[bar]*
RegExp的靜態(tài)屬性列表:
靜態(tài)屬性有2個(gè)名字,一個(gè)是復(fù)雜名,一個(gè)是以美元符號(hào)開頭的簡(jiǎn)短名字
復(fù)雜名?????????????????????短名??????????????????????????????????????????????? 描述
input???????????????????????? $_???????????????????????? 最后用于匹配的字符串(傳遞給test或exec方法的字符串)????
lastMatch????????????????? $&???????????????????????最后匹配的字符
lastParen?????????????????? $+????????????????????????最后匹配的分組
leftContext?????????????? $`??????????????????????????上次配配的前面的字符串
multiline?????????????????? $*???????????????????????? 用于指定是否所有的表達(dá)式都使用多行模式的bool值
rightContext???????????? $'?????????????????????????? 上次配配之后的字符串
例子:
var? sMatch="this has been a short ,short number";
var? reg = /(s)hort/g;
reg.test(sMatch);
alert(RegExp.$_);? //? this has been?a short ,short number
alert(RegExp.$`);//?this?has bean? a
alert(RegExp.$');// ,short number
alert(RegExp.$&)// short
alert(regExp.$+);// s
上面的例子使用的短名稱,可以用"."操作符,但是 大部分都應(yīng)該用"[ ]"標(biāo)記,因?yàn)橛行﹕cript不支持.regexp["$_"]
每次執(zhí)行exec 或者test時(shí)這些屬性除了multiline以為都會(huì)被重新設(shè)置.但是IE和opera不支持multiline屬性,所以最好單獨(dú)的每個(gè)表達(dá)式設(shè)置m選項(xiàng),而不要直接設(shè)置這個(gè)標(biāo)記.