VBScript Scripting Techniques > Regular Expressions
Nowadays, regular expressions are a powerful part of most programming and scripting languages.
They allow us to search strings or blocks of text using patterns instead of just fixed "filter strings".
In VBScript, Regular Expressions use the RegExp object, which was introduced in Windows Script Host version 5:
Set objRE = New RegExp
Three properties are available for the RegExp object:
Three methods are available for the RegExp object:
.Global = False).Global = False) or all (.Global = True) match(es) replaced by a new replacement stringIn general, patterns for WSH's RegExp object are like regex patterns in any scripting language.
Special characters and backreferences may differ from other languages, though.
Use the MSDN list of special characters for WSH's RegExp object.
In this example, all we want to know is whether a string is a valid e-mail address or not.
So we can use the RegExp object's Test method.
strEmail = "rob.van.der.woude@nodomainofmine.co.uk"
Set objRE = New RegExp
With objRE
.Pattern = "ˆ([\w-]+\.)*[\w-]+@([\w-]+\.)+[a-z]{2,4}$"
.IgnoreCase = True
.Global = False
End With
' Test method returns TRUE if a match is found
If objRE.Test( strEmail ) Then
WScript.Echo strEmail & " is a valid e-mail address"
Else
WScript.Echo strEmail & " is NOT a valid e-mail address"
End If
Set objRE = Nothing
Now that we know that we have a valid e-mail address, let's extract the domain name.
We will now use the RegExp object's Execute method, because we want the matching string itself.
strEmail = "rob.van.der.woude@nodomainofmine.co.uk"
Set objRE = New RegExp
With objRE
.Pattern = "ˆ([\w-]+\.)*[\w-]+@(([\w-]+\.)+[a-z]{2,4})$"
.IgnoreCase = True
.Global = False
End With
Set objMatch = objRE.Execute( strEmail )
' We should get only 1 match since the Global property is FALSE
If objMatch.Count = 1 Then
' Item(0) is the (first and only) matching e-mail address,
' Submatches(1) is the substring between the second set of
' parentheses (all indexes are zero based)
WScript.Echo "The domain name for " & strEmail _
& " is """ & objMatch.Item(0).Submatches(1) & """."
Else
WScript.Echo "No domain name was found for """ & strEmail & """."
End If
Set objMatch = Nothing
Set objRE = Nothing
Let's combine what we got so far, and add some code to change the domain name from "nodomainofmine.co.uk" to "myowndomain.co.uk".
This time we'll use the Replace method.
strEmail = "rob.van.der.woude@nodomainofmine.co.uk"
Set objRE = New RegExp
With objRE
.Pattern = "ˆ([\w-]+\.)*[\w-]+@([\w-]+\.)+[a-z]{2,4}$"
.IgnoreCase = True
.Global = False
End With
' Test method returns TRUE if a match is found
If objRE.Test( strEmail ) Then
WScript.Echo """" & strEmail & """ is a valid e-mail address."
Else
WScript.Echo """" & strEmail & """ is NOT a valid e-mail address."
Set objRE = Nothing
WScript.Quit 1
End If
objRE.Pattern = "ˆ([\w-]+\.)*[\w-]+@([\w-]+)(\.[\w-]+)*\.[a-z]{2,4}$"
Set objMatch = objRE.Execute( strEmail )
' We should get only 1 match since the Global property is FALSE
If objMatch.Count = 1 Then
' Item(0) is the (first and only) matching e-mail address,
' Submatches(1) is the substring between the second set of
' parentheses (all indexes are zero based)
strDomain = objMatch.Item(0).Submatches(1)
WScript.Echo "The string to be replaced is """ & strDomain & """."
Else
WScript.Echo "No domain name was found for """ & strEmail & """."
Set objRE = Nothing
WScript.Quit 1
End If
Set objMatch = Nothing
objRE.Pattern = "@" & strDomain
strNewDomain = "myowndomain"
strNewMail = objRE.Replace( strEmail, "@" & strNewDomain )
WScript.Echo "The new e-mail address is """ & strNewMail & """."
Set objRE = Nothing
Yes, I know, in real life we wouldn't replace the name like this, it would have been much easier and safer to use
strNewMail = Replace( strEmail, "@" & strDomain, "@" & strNewDomain )
instead.
page last modified: 2025-10-16; loaded in 0.0014 seconds