Regex 工具 |
grep |
PowerGREP |
RegexBuddy |
RegexMagic |
通用应用程序 |
EditPad Lite |
EditPad Pro |
语言和库 |
Boost |
Delphi |
GNU (Linux) |
Groovy |
Java |
JavaScript |
.NET |
PCRE (C/C++) |
PCRE2 (C/C++) |
Perl |
PHP |
POSIX |
PowerShell |
Python |
R |
Ruby |
std::regex |
Tcl |
VBScript |
Visual Basic 6 |
wxWidgets |
XML 模式 |
Xojo |
XQuery 和 XPath |
XRegExp |
数据库 |
MySQL |
Oracle |
PostgreSQL |
此网站上的更多内容 |
简介 |
正则表达式快速入门 |
正则表达式教程 |
替换字符串教程 |
应用程序和语言 |
正则表达式示例 |
正则表达式参考 |
替换字符串参考 |
书评 |
可打印 PDF |
关于此网站 |
RSS 源和博客 |
VBScript 内置了对正则表达式的支持。如果你使用 VBScript 在客户端验证网页上的用户输入,使用 VBScript 的正则表达式支持将极大地减少你需要编写的代码量。
Microsoft 在 Internet Explorer 5.5 版本中对 VBScript 的正则表达式支持做了一些重大增强。5.5 版本实现了相当多的基本 regex 功能,这些功能在 VBScript 的早期版本中缺失。每当本网站提到 VBScript 时,这些陈述指的是 VBScript 的 5.5 版本正则表达式支持。
基本上,Internet Explorer 5.5 实现了 JavaScript 正则表达式风格。但 IE 5.5 在 Web 标准上得分不高。它的 JavaScript 正则表达式实现与实际标准之间有相当多的差异。幸运的是,大多数都是不太可能影响你的特殊情况。因此,本网站上关于 JavaScript 正则表达式风格的所有内容也适用于 VBScript。IE 的现代版本在以怪癖模式呈现网页时仍然使用 IE 5.5 实现。在标准模式下,IE 的现代版本非常紧密地遵循 JavaScript 标准。即使安装了 IE 的现代版本,VBScript 正则表达式仍然使用 IE 5.5 实现。
JavaScript 和 VBScript 实现了 Perl 风格的正则表达式。然而,它们缺乏 Perl 和其他现代正则表达式风格中相当多的高级功能
RegExp 对象的 1.0 版甚至缺乏 惰性量词 等基本功能。这是本网站不讨论 VBScript RegExp 1.0 的主要原因。所有早于 5.5 的 Internet Explorer 版本都包含 RegExp 对象的 1.0 版。除了 1.0 和 5.5 之外没有其他版本。
您可以在 VBScript 中通过创建 RegExp 对象的一个或多个实例来使用正则表达式。此对象允许您在字符串中查找正则表达式匹配项,并用其他字符串替换字符串中的正则表达式匹配项。VBScript 的 RegExp 对象提供的功能非常基础。但是,它对于在 VBScript 中通常执行的简单输入验证和输出格式化任务来说已经足够了。
RegExp 对象基础性质的优势在于它非常易于使用。创建一个,放入一个正则表达式,然后让它进行匹配或替换。仅提供四个属性和三个方法。
创建对象后,将您想要搜索的正则表达式分配给 Pattern 属性。如果您想要使用一个文本正则表达式而不是用户提供的正则表达式,只需将正则表达式放入双引号字符串中。默认情况下,正则表达式区分大小写。将 IgnoreCase 属性设置为 True 以使其不区分大小写。默认情况下,插入符号和美元符号 仅匹配主题字符串的开头和结尾。如果您的主题字符串包含由换行符分隔的多行,您可以通过将 Multiline 属性设置为 True 来使插入符号和美元符号匹配这些行的开头和结尾。VBScript 没有使点匹配换行符字符的选项。最后,如果您希望 RegExp 对象返回或替换所有匹配项,而不仅仅是第一个匹配项,请将 Global 属性设置为 True。
'Prepare a regular expression object
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "regex"
设置 RegExp 对象的属性后,您可以调用三个方法之一来执行三个基本任务之一。Test 方法采用一个参数:一个要在其上测试正则表达式的字符串。Test 返回 True 或 False,指示正则表达式是否匹配(部分)字符串。在验证用户输入时,您通常需要检查整个字符串是否与正则表达式匹配。若要执行此操作,请在正则表达式的开头放置插入符号,在结尾放置美元符号,以将正则表达式固定在主题字符串的开头和结尾。
Execute 方法也接受一个字符串参数。它返回一个 MatchCollection 对象,而不是返回 True 或 False。如果正则表达式根本无法匹配主题字符串,MatchCollection.Count 将为零。如果 RegExp.Global 属性为 False(默认值),MatchCollection 将只包含第一个匹配项。如果 RegExp.Global 为 true,Matches> 将包含所有匹配项。
Replace 方法接受两个字符串参数。第一个参数是主题字符串,而第二个参数是替换文本。如果 RegExp.Global 属性为 False(默认值),Replace 将返回主题字符串,其中第一个正则表达式匹配项(如果有)被替换文本替换。如果 RegExp.Global 为 true,Replace 将返回主题字符串,其中所有正则表达式匹配项都被替换。
您可以指定一个空字符串作为替换文本。这将导致 Replace 方法返回主题字符串,其中删除了所有正则表达式匹配项。要将正则表达式匹配项作为替换的一部分重新插入,请在替换文本中包含 $&。例如,要在方括号中将每个正则表达式匹配项括起来,请指定 [$&] 作为替换文本。如果正则表达式包含 捕获括号,您可以在替换文本中使用 反向引用。$1 在替换文本中插入第一个捕获组匹配的文本,$2 插入第二个,依此类推,直到 $9。要在替换中包含一个美元符号,请在传递给 Replace 方法的字符串中连续输入两个美元符号。
MatchCollection 对象由 RegExp.Execute 方法返回,它是一个 Match 对象的集合。它只有两个只读属性。Count 属性指示集合包含多少个匹配项。Item 属性接受一个索引参数(范围从零到 Count-1),并返回一个 Match 对象。Item 属性是默认成员,因此您可以将 MatchCollection(7) 作为 MatchCollection.Item(7) 的简写。
处理集合中所有匹配项最简单的方法是使用 For Each 构造,例如
' Pop up a message box for each match
Set myMatches = myRegExp.Execute(subjectString)
For Each myMatch in myMatches
msgbox myMatch.Value, 0, "Found Match"
Next
Match 对象有四个只读属性。FirstIndex 属性指示匹配项左侧字符串中的字符数。如果匹配项在字符串的最开始找到,FirstIndex 将为零。如果匹配项从字符串中的第二个字符开始,FirstIndex 将为一,依此类推。请注意,这与 VBScript Mid 函数不同,如果您将 start 参数设置为一,它将提取字符串的第一个字符。Match 对象的 Length 属性指示匹配项中的字符数。Value 属性返回匹配的文本。
Match 对象的 SubMatches 属性是一个字符串集合。如果您的正则表达式有 捕获组,它才会有值。该集合将为每个捕获组保存一个字符串。Count 属性指示集合中的字符串数。Item 属性接受一个索引参数,并返回捕获组匹配的文本。Item 属性是默认成员,因此您可以将 SubMatches(7) 作为 SubMatches.Item(7) 的简写。遗憾的是,VBScript 没有提供一种方法来检索捕获组的匹配位置和长度。
同样不幸的是,SubMatches 属性不包含完整的正则表达式匹配,如 SubMatches(0)。相反,SubMatches(0) 包含由第一个捕获组匹配的文本,而 SubMatches(SubMatches.Count-1) 包含由最后一个捕获组匹配的文本。这与大多数其他编程语言不同。例如,在 VB.NET 中,Match.Groups(0) 返回整个正则表达式匹配,而 Match.Groups(1) 返回第一个捕获组的匹配。请注意,这也与您可以在传递给 RegExp.Replace 方法的替换文本中使用的反向引用不同。在替换文本中,$1 插入由第一个捕获组匹配的文本,就像大多数其他正则表达式风格所做的那样。$0 不会被任何内容替换,而是直接插入。
我创建了一个 示例网页,展示 VBScript 的正则表达式支持。如果您使用的是 Internet Explorer,您现在就可以在您的 Web 浏览器中尝试它。源代码显示在示例下方。
| 快速开始 | 教程 | 工具和语言 | 示例 | 参考 | 书籍评论 |
| grep | PowerGREP | RegexBuddy | RegexMagic |
| EditPad Lite | EditPad Pro |
| Boost | Delphi | GNU(Linux) | Groovy | Java | JavaScript | .NET | PCRE(C/C++) | PCRE2(C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML 架构 | Xojo | XQuery 和 XPath | XRegExp |
| MySQL | Oracle | PostgreSQL |
页面 URL:https://regexper.cn/vbscript.html
页面上次更新时间:2021 年 8 月 24 日
网站上次更新时间:2024 年 3 月 15 日
版权所有 © 2003-2024 Jan Goyvaerts。保留所有权利。