VBScript - 正则表达式

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

RegExp对象

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

属性

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

  • IgnoreCase : 一个Boolean属性,表示是否应对字符串中的所有可能匹配测试正则表达式,如果为true或false.如果未明确指定,则IgnoreCase值设置为False.

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

方法

  • 测试(搜索字符串) :  Test方法以字符串作为参数,如果正则表达式可以成功匹配字符串,则返回True,否则返回False.

  • 替换(search-string,replace-string) :  Replace方法有2个参数.如果搜索成功,则它将该匹配替换为替换字符串,并返回新字符串.如果没有匹配,则返回原始搜索字符串.

  • 执行(搜索字符串) :  Execute方法与Replace类似,只是它返回一个Matches集合对象,包含每个成功匹配的Match对象.它不会修改原始字符串.

匹配集合对象

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

  • 计数 :  Count方法表示集合中匹配对象的数量.

  • 项目 :  Item方法允许从匹配集合对象访问匹配对象.

匹配对象

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

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

  • 长度 : 一个值,表示匹配字符串的总长度.

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

所有关于模式参数

模式构建类似于PERL.使用正则表达式时,模式构建是最重要的事情.在本节中,我们将讨论如何根据各种因素创建模式.

位置匹配

位置匹配的重要性在于确保我们将正则表达式放在正确的位置.

符号描述
^仅匹配字符串的开头.
$仅匹配字符串的结尾.
\ b匹配任何单词边界
\B匹配任何非字边界

文字匹配

任何形式的字符,如字母,数字或特殊字符或甚至十进制,十六进制mal可以被视为文字.由于很少有字符在正则表达式的上下文中具有特殊含义,我们需要使用转义序列来转义它们.

符号描述
字母数字匹配字母和数字字符只有.
\ n匹配一个新行.
\ [匹配[仅限文字
\]匹配]只有文字
\(匹配(仅限文字
\)匹配)只有文字
\t匹配水平标签
\v匹配垂直制表符
\ |匹配|只有文字
\ {匹配{仅文字
\}只匹配文字
\\仅匹配\ literal
\?匹配?只有文字
\ *匹配*仅文字
\ +仅匹配+文字
\.匹配.只有文字
\b匹配任何单词边界
\B匹配任何非字边界
\ f匹配换页
\ r匹配回车
\ xxxx匹配八进制数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匹配任何空格字符类.相当于[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ :center;"> \S匹配任何空格字符类.相当于[^ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/h3>

重复匹配允许在正则表达式中进行多次搜索.它还指定元素在正则表达式中重复的次数.

符号描述
*匹配给定正则表达式的零次或多次出现.相当于{0,}.
+匹配给定正则表达式的一个或多个实例.相当于{1,}.
匹配给定正则表达式的零次或一次出现.相当于{0,1}.
{x}完全匹配给定正则表达式的x次出现次数.
{x,}匹配至少x次出现的给定正则表达式.
{x,y}将x与y给定正则表达式的出现次数匹配.

Alternation&分组

轮换和分组有助于开发人员创建更复杂的正则表达式,特别是处理正则表达式中的复杂子句,从而提供极大的灵活性和控制.

符号描述
0对子句进行分组以创建子句. "(xy)?(z)"匹配"xyz"或"z".
|Alternation结合一个正则表达式子句,然后匹配任何单个子句. "(ij)|(23)|(pq)"匹配"ij"或"23"或"pq".

构建正则表达式

以下是一些清楚解释如何构建正则表达式的示例.

正则表达式描述
"^ \s * .."和".. \ n * $"表示一行中可以包含任意数量的前导和尾随空格字符.
"((\ $ \s?)|(#\ s?))?"表示可选的$或#符号,后跟可选空格.
"((\d +(\.(\\\))?)?))"表示至少存在一位数字通过可选的小数和小数点后的两位数/td>

示例

以下示例检查用户是否输入了电子邮件其格式应匹配的ID,以便有一个电子邮件ID后跟'@',然后是域名.

<!DOCTYPE html>
<html>
   <body>
      <script language = "vbscript" type = "text/vbscript">
         strid = "welcome.user@IT屋.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>