JavaScript RegExp對象

1、什麼是RegExp

        一、RegExp 是正則表達式的縮寫。

     二、當您檢索某個文本時,可以使用一種模式來描寫敘述要檢索的內容。RegExp 就是這樣的模式。javascript

     三、簡單的模式可以是一個單獨的字符。html

        更復雜的模式包含了不少其它的字符,並可用於解析、格式檢查、替換等等。java

        您可以規定字符串中的檢索位置,以及要檢索的字符類型,等等。git

2、RegExp對象

         一、說明

                 RegExp 對象表示正則表達式,它是對字符串運行模式匹配的強大工具。用於規定在文本中檢索的內容。用於存儲檢索模式。好比:
var test = new RegExp("e")
         此行代碼定義名爲test的RegExp對象,其模式是"e",當您使用該 RegExp 對象在一個字符串中檢索時,將尋找的是字符 "e"。

         二、語法

               a、直接量語法數組

                     /pattern/attributes函數

               b、建立RegExp對象語法工具

                     new RegExp(pattern,attributes);spa

         三、參數   

       參數 pattern 是一個字符串,指定了正則表達式的模式或其它正則表達式。code

       參數 attributes 是一個可選的字符串,包括屬性 "g"、"i" 和 "m",分別用於指定全局匹配、區分大寫和小寫的匹配和多行匹配。regexp


         四、返回值        

       一個新的 RegExp 對象,具備指定的模式和標誌。假設參數 pattern 是正則表達式而不是字符串,那麼 RegExp() 構造函數將用與指定的 RegExp 一樣的模式和標誌建立一個新的 RegExp 對象。

       假設不用 new 運算符,而將 RegExp() 做爲函數調用,那麼它的行爲與用 new 運算符調用時同樣,僅僅是當 pattern 是正則表達式時,它僅僅返回 pattern,而再也不建立一個新的 RegExp 對象。


         五、修飾符

修飾符 描寫敘述
i 運行對大寫和小寫不敏感的匹配。
g 運行全局匹配(查找所有匹配而非在找到第一個匹配後中止)。
m 運行多行匹配。

         六、方括號

        方括號用於查找某個範圍內的字符:

表達式 描寫敘述
[abc] 查找方括號之間的不論什麼字符。
[^abc] 查找不論什麼不在方括號之間的字符。
[0-9] 查找不論什麼從 0 至 9 的數字。
[a-z] 查找不論什麼從小寫 a 到小寫 z 的字符。
[A-Z] 查找不論什麼從大寫 A 到大寫 Z 的字符。
[A-z] 查找不論什麼從大寫 A 到小寫 z 的字符。
[adgk] 查找給定集合內的不論什麼字符。
[^adgk] 查找給定集合外的不論什麼字符。
(red|blue|green) 查找不論什麼指定的選項。

         七、元字符

       元字符(Metacharacter)是擁有特殊含義的字符:

元字符 描寫敘述
. 查找單個字符,除了換行和行結束符。
\w 查找單詞字符。
\W 查找非單詞字符。
\d 查找數字。
\D 查找非數字字符。
\s 查找空白字符。
\S 查找非空白字符。
\b 匹配單詞邊界。
\B 匹配非單詞邊界。
\0 查找 NUL 字符。
\n 查找換行符。
\f 查找換頁符。
\r 查找回車符。
\t 查找製表符。
\v 查找垂直製表符。
\xxx 查找以八進制數 xxx 規定的字符。
\xdd 查找以十六進制數 dd 規定的字符。
\uxxxx 查找以十六進制數 xxxx 規定的 Unicode 字符。

         八、量詞

量詞 描寫敘述
n+ 匹配不論什麼包括至少一個 n 的字符串。
n* 匹配不論什麼包括零個或多個 n 的字符串。
n? 匹配不論什麼包括零個或一個 n 的字符串。
n{X} 匹配包括 X 個 n 的序列的字符串。
n{X,Y} 匹配包括 X 或 Y 個 n 的序列的字符串。
n{X,} 匹配包括至少 X 個 n 的序列的字符串。
n$ 匹配不論什麼結尾爲 n 的字符串。
^n 匹配不論什麼開頭爲 n 的字符串。
?=n 匹配不論什麼其後緊接指定字符串 n 的字符串。
?!n 匹配不論什麼其後沒有緊接指定字符串 n 的字符串。

3、RegExp對象屬性

       一、global屬性

                使用方法:global 屬性用於返回正則表達式是否具備標誌 "g"假設 g 標誌被設置,則該屬性爲 true,不然爲 false。
                語法:RegExpObject.global

       二、ignoreCase屬性

                使用方法: ignoreCase 屬性規定是否設置 "i" 標誌 假設設置了 "i" 標誌,則返回 true,不然返回 false。
                語法:RegExpObject.ignoreCase

       三、lastIndex屬性

                使用方法: lastIndex 屬性用於規定下次匹配的起始位置。
                語法:RegExpObject.lastIndex
                說明: 一、該屬性存放一個整數,它聲明的是上一次匹配文本以後的第一個字符的位置。

              二、上次匹配的結果是由方法 RegExp.exec() 和 RegExp.test() 找到的,它們都以 lastIndex 屬性所指的位置做爲下次檢索的起始點。這樣,就可以經過重複調用這兩個方法來遍歷一個字符串中的所有匹配文本。

              三、該屬性是可讀可寫的。僅僅要目標字符串的下一次搜索開始,就可以對它進行設置。當方法 exec() 或 test() 再也找不到可以匹配的文本時,它們會本身主動把 lastIndex 屬性重置爲 0。

       四、multiline屬性

                 使用方法: 一、multiline 屬性用於返回正則表達式是否具備標誌 m。

               二、在這樣的模式中,假設要檢索的字符串中含有換行符,^ 和 $ 錨除了匹配字符串的開頭和結尾外還匹配每行的開頭和結尾。

               三、假設 m 標誌被設置,則該屬性爲 true,不然爲 false。

                 語法:RegExpObject.multiline

       五、source屬性

       使用方法:source 屬性用於返回模式匹配所用的文本。該文本不包含正則表達式直接量使用的定界符,也不包含標誌 g、i、m。
        語法:RegExpObject.source

4、RegExp對象方法

       一、compile()
            使用方法:用於在腳本運行過程當中編譯正則表達式。也可用於改變和又一次編譯正則表達式。
        語法:RegExpObject.compile(regexp,modifier)
        參數:regexp表示正則表達式;modifier規定匹配的類型,分別爲g、i、m
        實例:在字符串中全局搜索 "no",並用 "bu" 替換。而後經過 compile() 方法,改變正則表達式,用 "bu" 替換 "no" 或 "not"
<html>
   <head></head>
   <body>
      <script type="text/javascript">
         var test="no zuo not to die"
         part=/no/g
         document.write(test.replace(part,"bu")+"<br/>")   //返回值:bu zuo but to die
         part.compile(/no(t)?/g)
         document.write(test.replace(part,"bu")+"<br/>")   //返回值:bu zuo bu to die
      </script>
   </body>
</html>

       二、exec()

             使用方法:用於檢索字符串中的正則表達式的匹配。
        語法:RegExpObject.exec(string)
        參數:string表示要檢索的字符串
        返回值:返回一個數組,當中存放匹配的結果。假設未找到匹配,則返回值爲 null。
        實例:全局檢索字符串中的 no:
<html>
   <head></head>
   <body>
      <script type="text/javascript">
         var test="no zuo not to die"
         var part = new RegExp("no","g")
         var result
         while((result = part.exec(test)) != null)
         {
             document.write(result);          
             document.write("<br/>");
             document.write(part.lastIndex);
             document.write("<br/>");
         }
      </script>
   </body>
</html>
返回值:no
        2
        no
        9

       三、test()

              使用方法:用於檢測一個字符串是否匹配某個模式.
        語法:RegExpObject.test(string)
        參數:string表示要檢索的字符串
        返回值:假設字符串 string 中含有與 RegExpObject 匹配的文本,則返回 true,不然返回 false。
        實例:檢索是否存在「no」
<html>
   <head></head>
   <body>
      <script type="text/javascript">
         var test="no zuo not to die"
         var part = new RegExp("no","g")
         var result = part.test(test)
         document.write(result)       //返回值:true
      </script>
   </body>
</html>

5、實例

       一、僅僅能輸入5-20個以字母開頭、可帶數字、「_」、「.」的字符
<html>
   <head>
      <script>
          function Excgent(r,g){
             if(r==""||g=="")
                return false
             else
             {
                 var part=new RegExp(r);
                 if(part.exec(g))
                    return true;
                 return false
                 
             }
          }
      </script>
   </head>
   <body>
      <h4>僅僅能輸入5-20個以字母開頭、可帶數字、「_」、「.」的字串<h4>

      <input type="text" id="a2" style="width:300px;"></input>
      <br/>
      <button onclick="alert(Excgent('^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$',a2.value))">點擊</button>
      <br/>
   </body>
</html>
       二、僅僅能輸入1-20位的數字

<html>
   <head>
      <script>
          function Excgent(r,g){
             if(r==""||g=="")
                return false
             else
             {
                 var part=new RegExp(r);
                 if(part.exec(g))
                    return true;
                 return false
                 
             }
          }
      </script>
   </head>
   <body>
      <h4>僅僅能輸入數字<h4>

      <input type="text" id="a2" style="width:300px;"></input>
      <br/>
      <button onclick="alert(Excgent('^[0-9]{1,20}$',a2.value))">點擊</button>
      <br/>
   </body>
</html>

       三、僅僅能以1三、159開頭的手機號碼
<html>
   <head>
      <script>
          function Excgent(r,g){
             if(r==""||g=="")
                return false
             else
             {
                 var part=new RegExp(r);
                 if(part.exec(g))
                    return true;
                 return false
                 
             }
          }
      </script>
   </head>
   <body>
      <h4>僅僅能1三、159開頭的手機號碼<h4>

      <input type="text" id="a2" style="width:300px;"></input>
      <br/>
      <button onclick="alert(Excgent('^13[0-9]{1}[0-9]{8}|^15[9]{1}[0-9]{8}',a2.value))">點擊</button>
      <br/>
   </body>
</html>
相關文章
相關標籤/搜索