五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > 溫故知新 javascript 正則表達(dá)式

溫故知新 javascript 正則表達(dá)式

文章來(lái)源:365jz.com     點(diǎn)擊數(shù):371    更新時(shí)間:2009-10-10 16:40   參與評(píng)論

  很長(zhǎng)時(shí)間沒(méi)看 正則表達(dá)式了,碰巧今天用到,溫故知新了一把 看書學(xué)習(xí)吧

50% 的舉一反三練習(xí)中的原創(chuàng)。

一 javascript正則表達(dá)式的基本知識(shí)
1     javascript 正則對(duì)象創(chuàng)建 和用法
    聲明javascript 正則表達(dá)式
     var reCat = new RegExp("cat");
      你也可以 
     var reCat = /cat/;      //Perl 風(fēng)格   (推薦)
2 學(xué)習(xí)最常用的 test exec match search  replace  split 6個(gè)方法
   1) test  檢查指定的字符串是否存在
       var data = "123123";
       var reCat = /123/gi;
       alert(reCat.test(data));  //true
       //檢查字符是否存在  g 繼續(xù)往下走  i 不區(qū)分大小寫
   2) exec 返回查詢值
       var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
       var reCat = /cat/i;
       alert(reCat.exec(data));  //Cat
     3)match  得到查詢數(shù)組
       var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
       var reCat = /cat/gi;
       var arrMactches = data.match(reCat)
       for (var i=0;i < arrMactches.length ; i++)
       {
            alert(arrMactches[i]);   //Cat  cat
       }
     4) search  返回搜索位置  類似于indexof
       var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
       var reCat = /cat/gi;
       alert(data.search(reCat));  //23
    5) replace  替換字符  利用正則替換
       var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
       var reCat = /cat/gi;
       alert(data.replace(reCat,"libinqq"));
    6)split   利用正則分割數(shù)組
       var data = "123123,213,12312,312,3,Cat,cat,dsfsdfs,";
       var reCat = /\,/;
       var arrdata = data.split(reCat);
       for (var i = 0; i < arrdata.length; i++)
       {
            alert(arrdata[i]);
       }
3  學(xué)習(xí)下  簡(jiǎn)單類   負(fù)向類  范圍類  組合類
    //簡(jiǎn)單類
       var data = "1libinqq,2libinqq,3libinqq,4libinqq";
       var reCat = /[123]libinqq/gi;
       var arrdata = data.match(reCat);
       for (var i = 0; i < arrdata.length; i++)
       {
            alert(arrdata[i]);  // 1libinqq 2libinqq  3libinqq
       }
       //負(fù)向類
       var data = "alibinqq,1libinqq,2libinqq,3libinqq,4libinqq";  //\u0062cf
       var reCat = /[^a123]libinqq/gi;
       var arrdata = data.match(reCat);
       for (var i = 0; i < arrdata.length; i++)
       {
            alert(arrdata[i]);  //4libinqq
       }
       //范圍類
       var data = "libinqq1,libinqq2,libinqq3,libinqq4,libinqq5";  //\u0062cf
       var reCat = /libinqq[2-3]/gi;
       var arrdata = data.match(reCat);
       for (var i = 0; i < arrdata.length; i++)
       {
            alert(arrdata[i]);   // libinqq2  libinqq3
       }
       //組合類
      var data = "a,b,c,w,1,2,3,5";  //\u0062cf
       var reCat = /[a-q1-4\n]/gi;
       var arrdata = data.match(reCat);
       for (var i = 0; i < arrdata.length; i++)
       {
            alert(arrdata[i]);  // a b c 1 2 3
       }
       這些都是 js正則 最基本的使用方法,看不會(huì)的請(qǐng)復(fù)制到筆記本練習(xí)下,看會(huì)了再往下面看。

二  javascript  正則表達(dá)式是分組知識(shí)

    1) 簡(jiǎn)單分組

Code
<script language="JavaScript">
<!--
/*正則表達(dá)式  簡(jiǎn)單的分組
    舉例 我們要查找字符串 MouseMouse
    var reCat = /MouseMouse/gi; 
    盡管這是可以的,但是有點(diǎn)浪費(fèi)。如果不知道Mouse 在字符串中到底出現(xiàn)幾次時(shí)該怎么辦,如果重復(fù)多次呢。
    var reCat = /(mouse){2}/gi;    括號(hào)的意思列Mouse 將在一行連續(xù)出現(xiàn)2次。
*/
var data = "Ah-mousemouse";  
var reCat = /(mouse){2}/gi;   
var arrdata = data.match(reCat);
for (var i = 0; i < arrdata.length; i++)
    {
        alert(arrdata[i]);
    }    
//-->
</script>

   2 復(fù)雜分組 

Code
<script language="JavaScript">
<!--
/*正則表達(dá)式  復(fù)雜的分組
         ?   零次 或 一次
    *   零次 或 多次
    +   最少一次 或 多次
*/
var data = "bb ba da bad dad aa ";  
var reCat = /([bd]ad?)/gi;   // 匹配出 ba da bad  dad
var arrdata = data.match(reCat);
for (var i = 0; i < arrdata.length; i++)
    {
        alert(arrdata[i]);
    }    
// 同時(shí) 也不介意將分組放在分組中間
// var re = /(mom( and dad)?)/;    匹配出 mom  或  mon and daa
//-->
</script>

3   反向引用

Code
<script language="JavaScript">
<!--
/*正則表達(dá)式  反向引用*/
var sToMatch = "#123456789";
var reNumbers = /#(\d+)/;
    reNumbers.test(sToMatch);
    alert(RegExp.$1);
/*
      這個(gè)例子嘗試匹配后面跟著幾個(gè)或多個(gè)數(shù)字的鎊符合,并對(duì)數(shù)字進(jìn)行分組
      以存儲(chǔ)他們。在調(diào)用 test 方法后,所有的反向引用都保存到了 RegExp 構(gòu)造函數(shù)中
      從 RegExp.$1(它保存了第一個(gè)反向引用)開(kāi)始,如果還有第二個(gè)反向引用,就是
      RegExp.$2,如果還有第三個(gè)反向引用存在,就是 RegExp.$3.依此類推。因?yàn)樵摻M
      匹配了 “123456780”,所以 RegExp.$1 中就存儲(chǔ)了這個(gè)字符串。
*/
var sToChange = "1234 5678";
var reMatch = /(\d{4}) (\d{4})/;
var sNew = sToChange.replace(reMatch,"$2 $1");
    alert(sNew);
/*
      在這個(gè)例子中,正則表達(dá)式有兩個(gè)分組,每一個(gè)分組有四個(gè)數(shù)字。在 replace() 方法的第二個(gè)參數(shù)
      中,$2 等同于 “5678” ,而 $1 等同于 “1234”,對(duì)應(yīng)于它們?cè)诒磉_(dá)式中的出現(xiàn)順序。
*/
//-->
</script>

4 候選

Code
<script language="JavaScript">
<!--
/*正則表達(dá)式  候選 */
var sToMatch1 = "red";
var sToMatch2 = "black";
var reRed = /red/;
var reBlack = /black/;
    alert(reRed.test(sToMatch1) || reBlack.test(sToMatch1));
    alert(reRed.test(sToMatch2) || reBlack.test(sToMatch2));
/*
     這雖然能完成任務(wù),但是十分沉長(zhǎng),還有另一種方式就是正則表達(dá)式的候選操作符。
*/
var sToMatch1 = "red";
var sToMatch2 = "black";
var reRedOrBlack = /(red|black)/;
    alert(reRedOrBlack.test(sToMatch1));
    alert(reRedOrBlack.test(sToMatch2));
//-->
</script>

5  非捕獲性分組

Code
<script language="JavaScript">
<!--
/*正則表達(dá)式  非捕獲性分組
    如果要?jiǎng)?chuàng)建一個(gè)非捕獲性分組,只要在左括號(hào)的后面加上一個(gè)問(wèn)號(hào)和一個(gè)緊跟的冒號(hào):
*/
var sToMatch = "#123456789";
var reNumbers = /#(?:\d+)/;
    reNumbers.test(sToMatch);
    alert(RegExp.$1);
/*
    這個(gè)例子的最后一行代碼輸出一個(gè)空字符串,因?yàn)樵摻M是非捕獲性的,
*/
var sToMatch = "#123456789";
var reNumbers = /#(?:\d+)/;
    alert(sToMatch.replace(reNumbers,"abcd$1"));
/*
    正因如此,replace()方法就不能通過(guò) RegExp.$x 變量來(lái)使用任何反向引用,這段代碼
    輸出的“abcd$1”而不是abcd123456789, 因?yàn)?1 在這里并不被看成是一個(gè)反向引用。
*/
//-->
</script>

6 前瞻

Code
<script language="JavaScript">
<!--
/*正則表達(dá)式  前瞻
    前瞻 就和它名字一樣,它告訴正則表達(dá)式運(yùn)算器向前看一些字符而不是移動(dòng)位置
*/
var sToMatch1 = "bedroom";
var sToMatch2 = "bedding";
var reBed = /bed(?=room)/; 
      alert(reBed.test(sToMatch1));  //true
      alert(reBed.test(sToMatch2));  //false
//負(fù)向前瞻
var sToMatch1 = "bedroom";
var sToMatch2 = "bedding";
var reBed = /bed(?!room)/; 
      alert(reBed.test(sToMatch1)); //false
      alert(reBed.test(sToMatch2)); //true
//-->
</script>

7 邊界

Code
<script language="JavaScript">
<!--
/*正則表達(dá)式  邊界
    ^     行開(kāi)頭
    $     行結(jié)尾
    \b    單詞的邊界
    \B    非單詞的邊界
*/
var sToMatch = "Important word is the last one.";
var reLastWord = /(\w+)\.$/; 
      reLastWord.test(sToMatch);
      alert(RegExp.$1);  //one
/*
    假如想查找一個(gè)單詞,但要它只出現(xiàn)在行尾,則可以使用美元符號(hào) ($)來(lái)表示它:
*/
var sToMatch = "Important word is the last one.";
var reLastWord = /^(\w+)/; 
      reLastWord.test(sToMatch);
      alert(RegExp.$1);  //Important
/*
    在這個(gè)例子中,正則表達(dá)式查找行起始位置后的一個(gè)或多個(gè)單詞字符。如果遇到非單詞字符
    匹配停止,返回 Important。 這個(gè)例子也可以用單詞邊界實(shí)現(xiàn)。
*/
var sToMatch = "Important word is the last one.";
var reLastWord = /^(.+?)\b/; 
      reLastWord.test(sToMatch);
      alert(RegExp.$1);  //Important
/*
    這里,正則表達(dá)式用惰性量詞來(lái)制定在單詞邊界之前可以出現(xiàn)任何字符,且可以出現(xiàn)一次或
    多次(如果使用貪婪性量詞,表達(dá)式就匹配整個(gè)字符串)。
*/
var data = " First second thind fourth fifth sixth ";  
var reCat = /\b(\S+?)\b/g;   
var arrdata = data.match(reCat);
for (var i = 0; i < arrdata.length; i++)
    {
        alert(arrdata[i]);
    }   
/*
    使用單詞邊界可以方便地從字符串中抽取單詞。
*/
//-->
</script>

8 多行模式

Code
<script language="JavaScript">
<!--
/*正則表達(dá)式  多行模式
      要制定多行模式,只要在正則表達(dá)式想要匹配的行末的一個(gè)單詞
*/
var data = " First second\n thind fourth\n fifth sixth";  
var reCat = /(\w+)$/g;   
var arrdata = data.match(reCat);
for (var i = 0; i < arrdata.length; i++)
    {
        alert(arrdata[i]);
    }  
/*
      上面只返回一個(gè)單詞 sixth,因?yàn)閾Q行符阻擋了匹配,只能匹配行末的一個(gè)單詞,
    當(dāng)然也可以使用 split() 方法將字符串分割成數(shù)組,但就得對(duì)每一行進(jìn)行單獨(dú)匹配。
    以前不好好看書經(jīng)常半吊子,看一半就仍了,導(dǎo)致用了好多 split, 其實(shí)很簡(jiǎn)單如下面
    例子 只需要 m 參數(shù)進(jìn)行多行匹配。
*/
var data = " First second\n thind fourth\n fifth sixth";  
var reCat = /(\w+)$/gm;   
var arrdata = data.match(reCat);
for (var i = 0; i < arrdata.length; i++)
    {
        alert(arrdata[i]);
    }  
//-->
</script>

  至此結(jié)束,這些都是 javascript 正則表達(dá)式的基本方法,如果你看會(huì)了看復(fù)雜的正則你會(huì)有豁然開(kāi)朗的感覺(jué)。
另外 我知道有些人很懶(包括我),所以正則分組的例子的我特此打包歡迎下載學(xué)習(xí)  js正則分組

其實(shí)還有 斷言 回逆 等 3~5種的正則,一看表12點(diǎn)了,又要舉例子又要翻譯,吐血,還是算了,我還是春夢(mèng)了無(wú)痕吧。

如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇

您可能感興趣的文章:

發(fā)表評(píng)論 (371人查看0條評(píng)論)
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)