正則表達(dá)式

RegExp 對象用于規(guī)定在文本中檢索的內(nèi)容。
簡單的模式可以是一個單獨(dú)的字符。
更復(fù)雜的模式包括了更多的字符,并可用于解析、格式檢查、替換等等。
定義量

     var pattern=/a$/;  //第一種
     var patterns=new RegExp("a$");   //第二種
修飾符

i:不區(qū)分大小寫
g:global,全局
gi:不區(qū)分大小寫的全局
m:多行的不知道跟全局有什么區(qū)別

 var att="My name is mian mian";
 var pattern=/an/g;      //global,全局
 document.write(att.match(pattern));  //an,an    
表達(dá)式

[abc]
查找方括號之間的任何字符。

[^abc]
查找任何不在方括號之間的字符。

[0-9]
查找任何從 0 至 9 的數(shù)字。

[a-z]
查找任何從小寫 a 到小寫 z 的字符。

[A-Z]
查找任何從大寫 A 到大寫 Z 的字符。

[A-z]
查找任何從大寫 A 到小寫 z 的字符。

[adgk]
查找給定集合內(nèi)的任何字符。

[^adgk]
查找給定集合外的任何字符。

red|blue
查找任何指定的選項(xiàng)。

 var att="Mynameismianmianred";
 var pattern=/is|an/g;
 document.write(att.match(pattern));  //is,an,an
元字符

[.]
查找單個字符,除了換行和行結(jié)束符。
多少個點(diǎn)就是后面還有多少個字符
var att="Mynameismianmianred";
var pattern=/is./g;
document.write(att.match(pattern));
[\w]
查找單詞字符。

[\W]
查找非單詞字符。

\b單詞的邊界
使用單詞的邊界來代替真正的空格符進(jìn)行匹配,可以避免如

var att=/\slanguage\s/;
    m="javascript is a 'good' language";
    document.write(m.match(att));         //null

明明是有的,卻像找不到一樣

    var att=/\blanguage\b/;
    m="javascript is a 'good' language";
    document.write(m.match(att));     //language

\B非單詞邊界,將把匹配的錨點(diǎn)定位在不是單詞的邊界之處,

     var att=/\Blanguage\B/;
    ar patt=/\Bscrip\B/;
    m="javascript is a 'good' language";
    document.write(m.match(att));     //null
    document.write(m.match(patt)) //scrip;

[\d]
查找數(shù)字。

[\D]
查找非數(shù)字字符。

[\s]
查找空白字符。

[\S]
查找非空白字符。

注意:在方括號內(nèi)也可以寫這些特殊轉(zhuǎn)義符,但是跟不用方括號的時候有一點(diǎn)點(diǎn)小小的區(qū)別,例如:

     var att="My name is 444n";
     var pattern=/[\d\S]/g;
     document.write(att.match(pattern)); 
    //M,y,n,a,m,e,i,s,4,4,4,n

不用方括號

    var att="My name is 444n";
     var pattern=/\d\S/g;
     document.write(att.match(pattern));  //44,4n

直接的話意思就會成為是說一個數(shù)字一個非Unicode空白字符的字符,因而需要加上一個或的符號’|'

    var att="My name is 444n";
     var pattern=/\d|\S/g;
     document.write(att.match(pattern));
    //M,y,n,a,m,e,i,s,4,4,4,n

另外,轉(zhuǎn)義符\b具有特殊含義,當(dāng)用在字符類中的時候,它表示的是退格符,所以要在正則表達(dá)式中按照直接量表示一個退格符只需要使用一個元素的字符類/[\b]/,而如果直接寫做/\b/就會表達(dá)為匹配單詞界。如:

     var att="My name is 444n\b";
     var pattern=/\b/g;
     document.write(att.match(pattern));//,,,,,,,

    var pattern=/[\b]/g;
     document.write(att.match(pattern));//輸出空白而不是null
重復(fù)字符語法

[n+]
匹配任何包含至少一個n 的字符串。

    var str="you are a good boy!"; 
    var patt1=/o+/g;
    document.write(str.match(patt1));   //o,oo,o

查找單詞:

    var pattern=/\w+/g;    //匹配至少一個單詞字符,而空格不算進(jìn)內(nèi),所以就是分單詞了
     document.write(att.match(pattern));  //My,name,is,444n

[n*]
匹配任何包含零個或多個 n 的字符串。

    var patt1=/o*/g;
    document.write(str.match(patt1));  
    //,o,,,,,,,,,,oo,,,,o,,,  //輸出結(jié)果把其他的都忽略掉

另外,對 "l" 進(jìn)行全局搜索,包括其后緊跟的一個或多個 "o",這樣也可以查詢一些其他的比如1開頭,其后有一個或多個0的數(shù)據(jù):

    var att="lolololllll\b";
     var pattern=/lo*/g;
    document.write(att.match(pattern));      //lo,lo,lo,l,l,l,l,l

然而需要注意的是,這些字符可能匹配0個字符,因此可能什么都不匹配。

     var att="My name is xiaomian";
     var pattern=/\z*/g;     
    if(att.match(pattern)) 
    document.write("true");    //att中未出現(xiàn)z,然而還是匹配成功

[n?]
匹配任何包含零個或一個 n 的字符串,使用方法與[n*]有點(diǎn)類似。

[n{X}]
匹配包含 X 個 n 的序列的字符串。

     var att="wo shi 小小娩 ";
     var pattern=/\S{3}/g;
    document.write(att.match(pattern));   //shi,小小娩

    var pattern=/\小{2}./g;
    document.write(att.match(pattern));   //小小娩

[n{X,Y}]
匹配包含 X 或 Y 個 n 的序列的字符串。只是一個或的關(guān)系,其他的沒什么區(qū)別吧

[n{X,}]
匹配包含至少 X 個 n 的序列的字符串。

     var att="we are the best!";
     var pattern=/\S{2,}/g;
     document.write(att.match(pattern));  //we,are,the,best!

[n$]
匹配任何結(jié)尾為 n 的字符串。

    var att="we are the best!";
     var pattern=/....!$/g;
     document.write(att.match(pattern));  //best!

[^n]
匹配任何開頭為 n 的字符串,與[n$]類似。

[?=n]
匹配任何其后緊接指定字符串 n 的字符串。

    var att="我是小娩";
     var pattern=/是(?=小)../g;
     document.write(att.match(pattern));   //是小娩

[?!n]
匹配任何其后沒有緊接指定字符串 n 的字符串。與[?=n]類似

圓括號的作用
  • 把單獨(dú)的項(xiàng)合成子表達(dá)式,以便可以像處理一個獨(dú)立的單元那樣使用|、‘、*等來對單元內(nèi)的項(xiàng)來進(jìn)行處理。例如:
    var att="javascript and java";
    var pattern=/java(script)?/g;
    console.log(att.match(pattern)); //["javascript", "java"]
  • 在完整模式中定義子模式。當(dāng)一個正則表達(dá)式成功地和目標(biāo)字符串相匹配時,可以從目標(biāo)串中抽出和圓括號中的子模式想匹配的部分
  • 允許在同一正則表達(dá)式的后部引用前面的子表達(dá)式。
    這是通過在字符"\"后加一位或多位數(shù)字來實(shí)現(xiàn)的。這個數(shù)字指定了帶圓括號的子表達(dá)式在正則表達(dá)式中的位置。如:
    \1引用的是第一個帶圓括號的子表達(dá)式,\3引用的是第三個帶圓括號的子表達(dá)式。例如:
    var att=/(java(script)?)\sis\s/ ;中(script)就可以用\2來指代
用于模式匹配的String方法

search():它的參數(shù)是一個正則表達(dá)式,返回第一個與之匹配的字串的起始位置,如果找不到匹配的字串,則會返回-1

     var patt=/\Bscrip\B/;
      m="javascript is a 'good' language";
      document.write(m.search(patt));        //4

search()不支持全局檢索,在檢查到第一個后就馬上返回了。
replace()用來檢索和替換操作。第一個參數(shù)是正則表達(dá)式,第二個參數(shù)是要進(jìn)行替換的字符串
如果 regexp 具有全局標(biāo)志 g,那么 replace() 方法將替換所有匹配的子串。否則,它只替換第一個匹配子串。

    var str="Visit Microsoft and Microsoft welcome you!"
    document.write(str.replace(/Microsoft/g,"W3S"));
     //Visit W3S and W3S welcome you!

$1、$2、...、$99 與 regexp 中的第 1 到第 99 個子表達(dá)式相匹配的文本。
$& 與 regexp 相匹配的子串。
$`: 位于匹配子串左側(cè)的文本。
$': 位于匹配子串右側(cè)的文本。
$$:直接量符號。

    name = "Doe, John";
  document.write(name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1")); //John Doe

match():它的唯一參數(shù)就是一個正則表達(dá)式,返回一個由匹配結(jié)果組成的數(shù)組。
split()方法,使用跟字符串的分割有點(diǎn)類似。

RegExp方法

test():如果包含匹配結(jié)果則返回true
exec():對一個指定的字符串執(zhí)行一個正則表達(dá)式,返回一個數(shù)組,并提供關(guān)于本次匹配的完整信息,當(dāng)具有g(shù)時,它將當(dāng)前正則表達(dá)式對象的lastIndex屬性設(shè)置為所指示的字符串開始檢索,每次查找之前都要設(shè)置為0;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容