lqxue

          常用鏈接

          統(tǒng)計(jì)

          book

          tools

          最新評(píng)論

          JavaScript中的正則表達(dá)式

          正則表達(dá)式(regular expression)對(duì)象包含一個(gè)正則表達(dá)式模式(pattern)。它具有用正則表達(dá)式模式去匹配或代替一個(gè)串(string)中特定字符(或字符集合)的屬性(properties)和方法(methods)。 要為一個(gè)單獨(dú)的正則表達(dá)式添加屬性,可以使用正則表達(dá)式構(gòu)造函數(shù)(constructor function),無論何時(shí)被調(diào)用的預(yù)設(shè)置的正則表達(dá)式擁有靜態(tài)的屬性(the predefined RegExp object has static properties that are set whenever any regular expression is used, 我不知道我翻得對(duì)不對(duì),將原文列出,請(qǐng)自行翻譯)。
          • 創(chuàng)建:
            一個(gè)文本格式或正則表達(dá)式構(gòu)造函數(shù)
            文本格式: /pattern/flags
            正則表達(dá)式構(gòu)造函數(shù): new RegExp("pattern"[,"flags"]);
          • 參數(shù)說明:
            pattern -- 一個(gè)正則表達(dá)式文本
            flags -- 如果存在,將是以下值:
            g: 全局匹配
            i: 忽略大小寫
            gi: 以上組合

          [注意] 文本格式的參數(shù)不用引號(hào),而在用構(gòu)造函數(shù)時(shí)的參數(shù)需要引號(hào)。如:/ab+c/i new RegExp("ab+c","i")是實(shí)現(xiàn)一樣的功能。在構(gòu)造函數(shù)中,一些特殊字符需要進(jìn)行轉(zhuǎn)意(在特殊字符前加""")。如:re = new RegExp("""w+")

          正則表達(dá)式中的特殊字符

          字符 含意
          "

          做為轉(zhuǎn)意,即通常在"""后面的字符不按原來意義解釋,如/b/匹配字符"b",當(dāng)b前面加了反斜桿后/"b/,轉(zhuǎn)意為匹配一個(gè)單詞的邊界。
          -或-
          對(duì)正則表達(dá)式功能字符的還原,如"*"匹配它前面元字符0次或多次,/a*/將匹配a,aa,aaa,加了"""后,/a"*/將只匹配"a*"。

          ^ 匹配一個(gè)輸入或一行的開頭,/^a/匹配"an A",而不匹配"An a"
          $ 匹配一個(gè)輸入或一行的結(jié)尾,/a$/匹配"An a",而不匹配"an A"
          * 匹配前面元字符0次或多次,/ba*/將匹配b,ba,baa,baaa
          + 匹配前面元字符1次或多次,/ba*/將匹配ba,baa,baaa
          ? 匹配前面元字符0次或1次,/ba*/將匹配b,ba
          (x) 匹配x保存x在名為$1...$9的變量中
          x|y 匹配x或y
          {n} 精確匹配n次
          {n,} 匹配n次以上
          {n,m} 匹配n-m次
          [xyz] 字符集(character set),匹配這個(gè)集合中的任一一個(gè)字符(或元字符)
          [^xyz] 不匹配這個(gè)集合中的任何一個(gè)字符
          ["b] 匹配一個(gè)退格符
          "b 匹配一個(gè)單詞的邊界
          "B 匹配一個(gè)單詞的非邊界
          "cX 這兒,X是一個(gè)控制符,/"cM/匹配Ctrl-M
          "d 匹配一個(gè)字?jǐn)?shù)字符,/"d/ = /[0-9]/
          "D 匹配一個(gè)非字?jǐn)?shù)字符,/"D/ = /[^0-9]/
          "n 匹配一個(gè)換行符
          "r 匹配一個(gè)回車符
          "s 匹配一個(gè)空白字符,包括"n,"r,"f,"t,"v等
          "S 匹配一個(gè)非空白字符,等于/[^"n"f"r"t"v]/
          "t 匹配一個(gè)制表符
          "v 匹配一個(gè)重直制表符
          "w 匹配一個(gè)可以組成單詞的字符(alphanumeric,這是我的意譯,含數(shù)字),包括下劃線,如["w]匹配"$5.98"中的5,等于[a-zA-Z0-9]
          "W 匹配一個(gè)不可以組成單詞的字符,如["W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]。

          說了這么多了,我們來看一些正則表達(dá)式的實(shí)際應(yīng)用的例子:

          E-mail地址驗(yàn)證:
           function test_email(strEmail) {
            var myReg = /^[_a-z0-9]+@([_a-z0-9]+".)+[a-z0-9]{2,3}$/;
            if(myReg.test(strEmail)) return true;
            return false;
           }
          HTML代碼的屏蔽
           function mask_HTMLCode(strInput) {
             var myReg = /<("w+)>/;
             return strInput.replace(myReg, "&lt;$1&gt;");
           }


          正則表達(dá)式對(duì)象的屬性及方法
          預(yù)定義的正則表達(dá)式擁有有以下靜態(tài)屬性:input, multiline, lastMatch, lastParen, leftContext, rightContext和$1到$9。其中input和multiline可以預(yù)設(shè)置。其他屬性的值在執(zhí)行過exec或test方法后被根據(jù)不同條件賦以不同的值。許多屬性同時(shí)擁有長(zhǎng)和短(perl風(fēng)格)的兩個(gè)名字,并且,這兩個(gè)名字指向同一個(gè)值。(JavaScript模擬perl的正則表達(dá)式)
          正則表達(dá)式對(duì)象的屬性
          屬性 含義
          $1...$9 如果它(們)存在,是匹配到的子串
          $_ 參見input
          $* 參見multiline
          $& 參見lastMatch
          $+ 參見lastParen
          $` 參見leftContext
          $'          參見rightContext
          constructor    創(chuàng)建一個(gè)對(duì)象的一個(gè)特殊的函數(shù)原型
          global       是否在整個(gè)串中匹配(bool型)
          ignoreCase     匹配時(shí)是否忽略大小寫(bool型)
          input        被匹配的串
          lastIndex     最后一次匹配的索引
          lastParen     最后一個(gè)括號(hào)括起來的子串
          leftContext    最近一次匹配以左的子串
          multiline     是否進(jìn)行多行匹配(bool型)
          prototype     允許附加屬性給對(duì)象
          rightContext    最近一次匹配以右的子串
          source       正則表達(dá)式模式
          lastIndex     最后一次匹配的索引

          正則表達(dá)式對(duì)象的方法
          方法 含義
          compile      正則表達(dá)式比較
          exec        執(zhí)行查找
          test        進(jìn)行匹配
          toSource      返回特定對(duì)象的定義(literal representing),其值可用來創(chuàng)建一個(gè)新的對(duì)象。重載Object.toSource方法得到的。
          toString      返回特定對(duì)象的串。重載Object.toString方法得到的。
          valueOf      返回特定對(duì)象的原始值。重載Object.valueOf方法得到
          例子
          <script language = "JavaScript">
          var myReg = /(w+)s(w+)/;
          var str  = "John Smith";
          var newstr = str.replace(myReg, "$2, $1");
          document.write(newstr);
          </script>
          將輸出"Smith, John"


          〓簡(jiǎn)介〓
          字符意義:對(duì)于字符,通常表示按字面意義,指出接著的字符為特殊字符,不作解釋。
          例如:/b/匹配字符'b',通過在b 前面加一個(gè)反斜杠,也就是/b/,則該字符變成特殊字符,表示匹配一個(gè)單詞的分界線。或者:對(duì)于幾個(gè)字符,通常說明是特殊的,指出緊接著的字符不是特殊的,而應(yīng)該按字面解釋。例如:*是一個(gè)特殊字符,匹配任意個(gè)字符(包括0個(gè)字符);例如:/a*/意味匹配0個(gè)或多個(gè)a。為了匹配字面上的*,在a前面加一個(gè)反斜杠;例如:/a*/匹配'a*'。

          〓正文〓
          字符
          意義:對(duì)于字符,通常表示按字面意義,指出接著的字符為特殊字符,不作解釋。
          例如:/b/匹配字符'b',通過在b 前面加一個(gè)反斜杠,也就是/b/,則該字符變成特殊字符,表示
          匹配一個(gè)單詞的分界線。
          或者:
          對(duì)于幾個(gè)字符,通常說明是特殊的,指出緊接著的字符不是特殊的,而應(yīng)該按字面解釋。
          例如:*是一個(gè)特殊字符,匹配任意個(gè)字符(包括0個(gè)字符);例如:/a*/意味匹配0個(gè)或多個(gè)a。
          為了匹配字面上的*,在a前面加一個(gè)反斜杠;例如:/a*/匹配'a*'。

          字符^
          意義:表示匹配的字符必須在最前邊。
          例如:/^A/不匹配"an A,"中的'A',但匹配"An A."中最前面的'A'。

          字符$
          意義:與^類似,匹配最末的字符。
          例如:/t$/不匹配"eater"中的't',但匹配"eat"中的't'。

          字符*
          意義:匹配*前面的字符0次或n次。
          例如:/bo*/匹配"A ghost booooed"中的'boooo'或"A bird warbled"中的'b',但不匹配"A goat g
          runted"中的任何字符。

          字符+
          意義:匹配+號(hào)前面的字符1次或n次。等價(jià)于{1,}。
          例如:/a+/匹配"candy"中的'a'和"caaaaaaandy."中的所有'a'。

          字符?
          意義:匹配?前面的字符0次或1次。
          例如:/e?le?/匹配"angel"中的'el'和"angle."中的'le'。

          字符.
          意義:(小數(shù)點(diǎn))匹配除換行符外的所有單個(gè)的字符。
          例如:/.n/匹配"nay, an apple is on the tree"中的'an'和'on',但不匹配'nay'。


          字符(x)
          意義:匹配'x'并記錄匹配的值。
          例如:/(foo)/匹配和記錄"foo bar."中的'foo'。匹配子串能被結(jié)果數(shù)組中的素[1], ..., [n] 返
          回,或被RegExp對(duì)象的屬性$1, ..., $9返回。

          字符x|y
          意義:匹配'x'或者'y'。
          例如:/green|red/匹配"green apple"中的'green'和"red apple."中的'red'。

          字符{n}
          意義:這里的n是一個(gè)正整數(shù)。匹配前面的n個(gè)字符。
          例如:/a{2}/不匹配"candy,"中的'a',但匹配"caandy," 中的所有'a'和"caaandy."中前面的兩個(gè)
          'a'。

          字符{n,}
          意義:這里的n是一個(gè)正整數(shù)。匹配至少n個(gè)前面的字符。
          例如:/a{2,}不匹配"candy"中的'a',但匹配"caandy"中的所有'a'和"caaaaaaandy."中的所有'a'

          字符{n,m}
          意義:這里的n和m都是正整數(shù)。匹配至少n個(gè)最多m個(gè)前面的字符。
          例如:/a{1,3}/不匹配"cndy"中的任何字符,但匹配 "candy,"中的'a',"caandy," 中的前面兩個(gè)
          'a'和"caaaaaaandy"中前面的三個(gè)'a',注意:即使"caaaaaaandy" 中有很多個(gè)'a',但只匹配前面的三
          個(gè)'a'即"aaa"。

          字符[xyz]
          意義:一字符列表,匹配列出中的任一字符。你可以通過連字符-指出一個(gè)字符范圍。
          例如:[abcd]跟[a-c]一樣。它們匹配"brisket"中的'b'和"ache"中的'c'。

          字符[^xyz]
          意義:一字符補(bǔ)集,也就是說,它匹配除了列出的字符外的所有東西。 你可以使用連字符-指出一
          字符范圍。
          例如:[^abc]和[^a-c]等價(jià),它們最早匹配"brisket"中的'r'和"chop."中的'h'。

          字符[b]
          意義:匹配一個(gè)空格(不要與b混淆)

          字符b
          意義:匹配一個(gè)單詞的分界線,比如一個(gè)空格(不要與[b]混淆)
          例如:/bnw/匹配"noonday"中的'no',/wyb/匹配"possibly yesterday."中的'ly'。

          字符B
          意義:匹配一個(gè)單詞的非分界線
          例如:/wBn/匹配"noonday"中的'on',/yBw/匹配"possibly yesterday."中的'ye'。

          字符cX
          意義:這里的X是一個(gè)控制字符。匹配一個(gè)字符串的控制字符。
          例如:/cM/匹配一個(gè)字符串中的control-M。

          字符d
          意義:匹配一個(gè)數(shù)字,等價(jià)于[0-9]。
          例如:/d/或/[0-9]/匹配"B2 is the suite number."中的'2'。

          字符D
          意義:匹配任何的非數(shù)字,等價(jià)于[^0-9]。
          例如:/D/或/[^0-9]/匹配"B2 is the suite number."中的'B'。

          字符f
          意義:匹配一個(gè)表單符

          字符n
          意義:匹配一個(gè)換行符

          字符r
          意義:匹配一個(gè)回車符

          字符s
          意義:匹配一個(gè)單個(gè)white空格符,包括空格,tab,form feed,換行符,等價(jià)于[ fnrtv]。
          例如:/sw*/匹配"foo bar."中的' bar'。

          字符S
          意義:匹配除white空格符以外的一個(gè)單個(gè)的字符,等價(jià)于[^ fnrtv]。
          例如:/S/w*匹配"foo bar."中的'foo'。

          字符t
          意義:匹配一個(gè)制表符

          字符v
          意義:匹配一個(gè)頂頭制表符

          字符w
          意義:匹配所有的數(shù)字和字母以及下劃線,等價(jià)于[A-Za-z0-9_]。
          例如:/w/匹配"apple,"中的'a',"$5.28,"中的'5'和"3D."中的'3'。

          字符W
          意義:匹配除數(shù)字、字母外及下劃線外的其它字符,等價(jià)于[^A-Za-z0-9_]。
          例如:/W/或者/[^$A-Za-z0-9_]/匹配"50%."中的'%'。

          字符n
          意義:這里的n是一個(gè)正整數(shù)。匹配一個(gè)正則表達(dá)式的最后一個(gè)子串的n的值(計(jì)數(shù)左圓括號(hào))。

          例如:/apple(,)sorange1/匹配"apple, orange, cherry, peach."中的'apple, orange',下面
          有一個(gè)更加完整的例子。
          注意:如果左圓括號(hào)中的數(shù)字比n指定的數(shù)字還小,則n取下一行的八進(jìn)制escape作為描述。

          字符ooctal和xhex
          意義:這里的ooctal是一個(gè)八進(jìn)制的escape值,而xhex是一個(gè)十六進(jìn)制的escape值,允許在一個(gè)正則表達(dá)式中嵌入ASCII碼。

          posted on 2008-11-24 14:31 lqx 閱讀(227) 評(píng)論(0)  編輯  收藏 所屬分類: htmlweb

          主站蜘蛛池模板: 桑日县| 襄汾县| 马边| 屏山县| 绿春县| 南川市| 临海市| 堆龙德庆县| 都兰县| 登封市| 积石山| 德兴市| 伊通| 泽州县| 淮北市| 镇原县| 乌什县| 大兴区| 木兰县| 芜湖县| 福安市| 新密市| 阿城市| 临泽县| 宜良县| 韶山市| 神池县| 宁强县| 马山县| 津市市| 武安市| 麻城市| 崇礼县| 江西省| 东城区| 苏尼特右旗| 普定县| 察雅县| 赞皇县| 唐海县| 西乌珠穆沁旗|