VBScript - 无法让正则表达式在脚本中匹配,即使正则表达式在在线测试器中验证

VBScript - Not able to get regex to match in script, even if regex validates in online tester

我正在我的 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 作为我们测试环境的电子邮件服务器 - 我正在尝试批量删除邮件。问题是消息具有英语语言环境,但服务器具有挪威语语言环境。例如,十月在挪威语言环境中简称为 'Oktober' 和 'Okt'。所以我需要更新脚本并将 '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 = " Okt"
    NewDateTime = objRegExp.Replace(dateAndTime,strReplace)
    wscript.echo NewDateTime
else 
    Wscript.Echo "No match"
end if