VBScript - 正則表示式



正則表示式是由一系列字元組成的模式,主要用於搜尋和替換。建立模式的目的是匹配特定的字串,以便開發者可以根據條件提取字元並替換某些字元。

RegExp 物件

RegExp 物件幫助開發者匹配字串的模式,其屬性和方法使我們能夠輕鬆地使用正則表示式。它類似於 JavaScript 中的 RegExp。

屬性

  • Pattern − Pattern 方法表示用於定義正則表示式的字串,在使用正則表示式物件之前應先設定它。

  • IgnoreCase − 一個布林屬性,表示如果為 true,則正則表示式是否應針對字串中的所有可能匹配項進行測試;如果為 false,則不進行測試。如果未顯式指定,則 IgnoreCase 值設定為 False。

  • Global − 一個布林屬性,表示正則表示式是否應針對字串中的所有可能匹配項進行測試。如果未顯式指定,則 Global 值設定為 False。

方法

  • Test(search-string) − Test 方法接受一個字串作為引數,如果正則表示式可以成功與字串匹配,則返回 True;否則返回 False。

  • Replace(search-string, replace-string) − Replace 方法接受 2 個引數。如果搜尋成功,則它將該匹配項替換為 replace-string,並返回新的字串。如果沒有匹配項,則返回原始 search-string。

  • Execute(search-string) − Execute 方法的工作方式類似於 Replace,不同之處在於它返回一個 Matches 集合物件,其中包含每個成功匹配項的 Match 物件。它不會修改原始字串。

Matches 集合物件

Matches 集合物件作為 Execute 方法的結果返回。此集合物件可以包含零個或多個 Match 物件,並且此物件的屬性為只讀。

  • Count − Count 方法表示集合中 Match 物件的數量。

  • Item − Item 方法使可以從 Matches 集合物件訪問 Match 物件。

Match 物件

Match 物件包含在 Matches 集合物件中。這些物件表示搜尋字串後成功的匹配項。

  • FirstIndex − 它表示匹配項在原始字串中出現的位置。此索引為基於零的索引,這意味著字串中的第一個位置為 0。

  • Length − 表示匹配字串的總長度的值。

  • Value − 表示匹配的值或文字的值。訪問 Match 物件時,這也是預設值。

關於 Pattern 引數

模式構建類似於 PERL。模式構建是使用正則表示式時最重要的事情。在本節中,我們將討論如何根據各種因素建立模式。

位置匹配

位置匹配的重要性在於確保我們將正則表示式放在正確的位置。

符號 描述
^ 僅匹配字串的開頭。
$ 僅匹配字串的結尾。
\b 匹配任何單詞邊界
\B 匹配任何非單詞邊界

字面量匹配

任何形式的字元,例如字母、數字或特殊字元,甚至十進位制、十六進位制都可以作為字面量處理。由於某些字元在正則表示式的上下文中已經具有特殊含義,因此我們需要使用轉義序列對其進行轉義。

符號 描述
字母數字 僅匹配字母和數字字元。
\n 匹配換行符。
\[ 僅匹配 [ 字面量
\] 僅匹配 ] 字面量
\( 僅匹配 ( 字面量
\) 僅匹配 ) 字面量
\t 匹配水平製表符
\v 匹配垂直製表符
\| 僅匹配 | 字面量
\{ 僅匹配 { 字面量
\} 僅匹配 } 字面量
\\ 僅匹配 \ 字面量
\? 僅匹配 ? 字面量
\* 僅匹配 * 字面量
\+ 僅匹配 + 字面量
\. 僅匹配 . 字面量
\b 匹配任何單詞邊界
\B 匹配任何非單詞邊界
\f 匹配換頁符
\r 匹配回車符
\xxx 匹配八進位制數 xxx 的 ASCII 字元。
\xdd 匹配十六進位制數 dd 的 ASCII 字元。
\uxxxx 匹配 UNICODE 字面量 xxxx 的 ASCII 字元。

字元類匹配

字元類是由自定義分組形成的模式,幷包含在 [ ] 大括號中。如果我們期望的字元類不應在列表中,則應使用負號(^),這是一個帽子符號來忽略該特定字元類。

符號 描述
[xyz] 匹配字元集中包含的任何字元類。
[^xyz] 匹配字元集中未包含的任何字元類。
. 匹配除 \n 之外的任何字元類
\w 匹配任何單詞字元類。等效於 [a-zA-Z_0-9]
\W 匹配任何非單詞字元類。等效於 [^a-zA-Z_0-9]
\d 匹配任何數字類。等效於 [0-9]。
\D 匹配任何非數字字元類。等效於 [^0-9]。
\s 匹配任何空格字元類。等效於 [ \t\r\n\v\f]
\S 匹配任何非空格字元類。等效於 [^ \t\r\n\v\f]

重複匹配

重複匹配允許在正則表示式中進行多次搜尋。它還指定正則表示式中元素重複的次數。

符號 描述
* 匹配給定正則表示式的零個或多個出現。等效於 {0,}。
+ 匹配給定正則表示式的一個或多個出現。等效於 {1,}。
? 匹配給定正則表示式的零個或一個出現。等效於 {0,1}。
{x} 精確匹配給定正則表示式的 x 個出現。
{x,} 至少匹配給定正則表示式的 x 個或更多出現。
{x,y} 匹配給定正則表示式的 x 到 y 個出現。

替換和分組

替換和分組幫助開發者建立更復雜的正則表示式,尤其是在處理正則表示式中的複雜子句時,這提供了極大的靈活性和控制能力。

符號 描述
() 分組子句以建立子句。“(xy)?(z)”匹配“xyz”或“z”。
| 替換組合一個正則表示式子句,然後匹配任何單個子句。“(ij)|(23)|(pq)”匹配“ij”或“23”或“pq”。

構建正則表示式

下面是一些清楚地解釋如何構建正則表示式的示例。

正則表示式 描述
"^\s*.." 和 "..\s*$" 表示在一行中可以有任意數量的前導和尾隨空格字元。
"((\$\s?)|(#\s?))?" 表示可選的 $ 或 # 符號,後跟可選空格。
"((\d+(\.(\d\d)?)?))" 表示至少存在一個數字,後跟可選小數點和小數點後兩位數字。

示例

以下示例檢查使用者輸入的電子郵件 ID 格式是否匹配,例如,電子郵件 ID 後跟“@”,然後後跟域名。

<!DOCTYPE html>
<html>
   <body>
      <script language = "vbscript" type = "text/vbscript">
         strid = "welcome.user@tutorialspoint.co.us"
         Set re = New RegExp
         With re
            .Pattern    = "^[\w-\.]{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,3}$"
            .IgnoreCase = False
            .Global     = False
         End With
        
         ' Test method returns TRUE if a match is found
         If re.Test( strid ) Then
            Document.write(strid & " is a valid e-mail address")
         Else
            Document.write(strid & " is NOT a valid e-mail address")
         End If
        
        Set re = Nothing
      </script>
   </body>
</html>
廣告