VBScript - 正则表达式


正则表达式是形成模式的字符序列,主要用于搜索和替换。创建模式的目的是匹配特定的字符串,以便开发人员可以根据条件提取字符并替换某些字符。

正则表达式对象

RegExp 对象帮助开发人员匹配字符串模式,其属性和方法帮助我们轻松使用正则表达式。它类似于 JavaScript 中的 RegExp

特性

  • Pattern - Pattern 方法表示一个用于定义正则表达式的字符串,应在使用正则表达式对象之前设置它。

  • IgnoreCase - 一个布尔属性,表示是否应针对字符串中的所有可能匹配项(如果 true 或 false)测试正则表达式。如果未明确指定,IgnoreCase 值将设置为 False。

  • Global - 一个布尔属性,表示是否应针对字符串中的所有可能匹配项测试正则表达式。如果未明确指定,全局值将设置为 False。

方法

  • Test (search-string) - Test 方法采用字符串作为参数,如果正则表达式可以成功与字符串匹配,则返回 True,否则返回 False。

  • Replace (search-string, Replace-string) - Replace 方法有 2 个参数。如果搜索成功,则会用替换字符串替换该匹配项,并返回新字符串。如果没有匹配项,则返回原始搜索字符串。

  • Execute (search-string) - Execute 方法的工作方式与 Replace 类似,不同之处在于它返回一个 Matches 集合对象,其中包含每个成功匹配的 Match 对象。它不会修改原始字符串。

匹配集合对象

Matches 集合对象作为 Execute 方法的结果返回。该集合对象可以包含零个或多个 Match 对象,并且该对象的属性是只读的。

  • Count - Count 方法表示集合中匹配对象的数量。

  • Item - Item 方法允许从匹配集合对象访问匹配对象。

匹配对象

Match 对象包含在 matches 集合对象中。这些对象代表搜索字符串后成功匹配。

  • FirstIndex - 它表示原始字符串中发生匹配的位置。该索引从零开始,这意味着字符串中的第一个位置是 0。

  • 长度- 表示匹配字符串总长度的值。

  • - 表示匹配值或文本的值。它也是访问 Match 对象时的默认值。

关于模式参数的所有信息

模式构建与 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 次出现次数。

交替与分组

交替和分组可帮助开发人员创建更复杂的正则表达式,特别是处理正则表达式中的复杂子句,从而提供了极大的灵活性和控制力。

象征 描述
0 对子句进行分组以创建子句。“(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>