VBScript - 正则表达式
正则表达式是形成模式的字符序列,主要用于搜索和替换。 创建模式的目的是匹配特定的字符串,以便开发者可以根据条件提取字符并替换某些字符。
RegExp 正则表达式对象
RegExp 对象帮助开发人员匹配字符串模式,其属性和方法帮助我们轻松使用正则表达式。 它类似于 JavaScript 中的 RegExp
属性
Pattern − Pattern 方法表示一个用于定义正则表达式的字符串,应在使用正则表达式对象之前设置它。
IgnoreCase − 一个布尔属性,表示是否应针对字符串中的所有可能匹配项来测试正则表达式(如果为真或为假)。 如果未明确指定,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。
Length − 表示匹配字符串总长度的值。
Value − 表示匹配值或文本的值。 这也是访问 Match 对象时的默认值。
关于模式参数的所有内容
模式构建与 PERL 类似。 使用正则表达式时,模式构建是最重要的事情。 在本节中,我们将讨论如何根据各种因素创建模式。
位置匹配
位置匹配的意义在于确保我们将正则表达式放置在正确的位置。
| 符号 | 描述 |
|---|---|
| ^ | 仅匹配字符串的开头。 |
| $ | 仅匹配字符串的末尾。 |
| \b | 匹配任何单词边界 |
| \B | 匹配任何非单词边界 |
文字匹配
任何形式的字符,如字母、数字或特殊字符,甚至十进制、十六进制都可以被视为文字。 由于很少有字符在正则表达式上下文中已经具有特殊含义,因此我们需要使用转义序列对它们进行转义。
| 符号 | 描述 |
|---|---|
| 字母数字 | 仅匹配字母和数字字符。 |
| 匹配新行。 | |
| \[ | 仅匹配 [ 文字 |
| \] | 仅匹配 ] 文字 |
| \( | 仅匹配( 文字 |
| \) | 仅匹配 ) 文字 |
| 匹配水平制表符 | |
| \v | 匹配垂直制表符 |
| \| | 仅匹配 | 文字 |
| \{ | 仅匹配 { 文字 |
| \} | 仅匹配 } 文字 |
| \ | 仅匹配 \ 文字 |
| \? | 仅匹配 ? 字面 |
| \* | 仅匹配 * 文字 |
| \+ | 仅匹配 + 文字 |
| \. | 仅匹配 . 文字 |
| \b | 匹配任何单词边界 |
| \B | 匹配任何非单词边界 |
| \f | 匹配换页符 |
| 匹配回车符 | |
| \xxx | 匹配八进制数 xxx 的 ASCII 字符。 |
| \xdd | 匹配十六进制数dd的ASCII字符。 |
| \uxxxx | 匹配 UNICODE 文字 xxxx 的 ASCII 字符。 |
字符类匹配
字符类是通过自定义分组形成的模式,并括在 [ ] 大括号内。 如果我们期望一个不应出现在列表中的字符类,那么我们应该使用负号(即大写字母 ^)忽略该特定字符类。
| 符号 | 描述 |
|---|---|
| [xyz] | 匹配字符集中包含的任何字符类。 |
| [^xyz] | 匹配任何未包含在字符集中的字符类。 |
| . | |
| \w | 匹配任何单词字符类。 相当于[a-zA-Z_0-9] |
| \W | 匹配任何非单词字符类。 相当于[^a-zA-Z_0-9] |
| \d | 匹配任何数字类别。 相当于[0-9]。 |
| \D | 匹配任何非数字字符类。 相当于[^0-9]。 |
| \s | 匹配任何空格字符类。 相当于[\v\f] |
| \S | 匹配任何非空格字符类。 相当于[^\v\f] |
重复匹配
重复匹配允许在正则表达式内进行多次搜索。 它还指定元素在正则表达式中重复的次数。
| 符号 | 描述 |
|---|---|
| * | 匹配零次或多次出现的给定正则表达式。 相当于 {0,}。 |
| + | 匹配一个或多个出现的给定正则表达式。 相当于{1,}。 |
| ? | 匹配零次或一次出现的给定正则表达式。 相当于{0,1}。 |
| {x} | 精确匹配给定正则表达式的 x 次出现。 |
| {x,} | 匹配至少 x 次或多次出现的给定正则表达式。 |
| {x,y} | 匹配给定正则表达式的 x 到 y 次出现次数。 |
交替和分组
交替和分组可帮助开发人员创建更复杂的正则表达式,特别是处理正则表达式中的复杂子句,从而提供了极大的灵活性和控制力。
| 符号 | 描述 |
|---|---|
| 0 | 对子句进行分组以创建子句。 "(xy)?(z)"匹配"xyz"或"z"。 |
| | | Alternation 组合一个正则表达式子句,然后匹配任何单个子句。 "(ij)|(23)|(pq)"匹配"ij"或"23"或"pq"。 |
构建正则表达式
下面给出了一些示例,清楚地解释了如何构建正则表达式。
| 正则表达式 | 描述 |
|---|---|
| "^\s*.." and "..\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>

