问题描述
我正在Windows 10笔记本电脑上测试以下.vbs代码段,但该代码段不匹配。正则表达式本身根据regex101.com来说还算不错-它确实在月份匹配,但是在运行脚本时却不匹配-而且由于我对VBScript的了解非常少-我似乎无法解决这个难题。我认为我缺少VBScript和Regex的特定内容。
Dim dateAndTime
dateAndTime = Mid("Tue,8 Oct 2019 11:47:37 +0200 (GMT+02:00)",6,20)
Wscript.Echo "dateAndTime=" & dateAndTime
Set objRegExp = new RegExp
objRegExp.Global = True
' Neither patterns works,but all is fine in regex101
objRegExp.Pattern = "^\w{3,},\s\d{1,2}\s(\w{3,})"
'objRegExp.Pattern = "^\w+,\s\d+\s(\w+)"
'objRegExp.Pattern = "\w+,\d+ (\w+)"
If (objRegExp.Test(dateAndTime) = True) Then
' never gets here
Wscript.Echo "Match"
else
' always ends here
Wscript.Echo "No match"
end if
以防万一有人怀疑-我们正在将hmailserver用作我们的测试环境的电子邮件服务器-并且我正尝试批量删除邮件。问题是消息具有英语语言环境,但是服务器具有挪威语语言环境。因此,例如在挪威语言环境中,十月简写为“十月”和“十月”。因此,我需要更新脚本并将“ Oct”替换为“ Okt”,以便能够创建日期对象,然后查看消息是否早于X天才能删除。
解决方法
如果我了解您的目标是获得Tue,8 Okt 2019 11:47:37 +0200 (GMT+02:00)
而不是Tue,8 Oct 2019 11:47:37 +0200 (GMT+02:00)
因此您可以像这样修改脚本:
Dim dateAndTime
dateAndTime = "Tue,8 Oct 2019 11:47:37 +0200 (GMT+02:00)"
Set objRegExp = new RegExp
objRegExp.Global = True
objRegExp.Pattern = "(^\w{3,},\s\d{1,2}\s)(\w{3,})"
If (objRegExp.Test(dateAndTime) = True) Then
Wscript.Echo "Match"
strReplace = "$1 Okt"
NewDateTime = objRegExp.Replace(dateAndTime,strReplace)
wscript.echo NewDateTime
else
Wscript.Echo "No match"
end if