无法使Outlook VBA RegEx子表达式工作

时间:2016-06-29 21:53:47

标签: regex vba outlook outlook-vba

我正在尝试为Outlook编写一个VBA脚本,它会自动添加我发送的电子邮件的链接。典型的电子邮件看起来像这样:

  

您好,我注意到订单12345似乎不完整。具体来说,您想购买多少小部件?请使用正确的窗口小部件数量更新订单12345。谢谢。

随时出现“订单12345”,我想插入http://something.com/order.html?o=12345的链接 - 电子邮件格式可能会更改,订单号可能会更改。我希望任何“订单”实例后跟任何数字链接到网站上的相应订单页面。

RegEx似乎是一个明显的答案。我在项目中启用了Microsoft VBScript Regular Expressions 5.5库,并根据https://msdn.microsoft.com/en-us/library/k9z80300(v=vs.84).aspx编写了以下代码:

Sub Add_Order_Links()
    Dim miMessage As Outlook.MailItem
    Dim rgx As New RegExp
    Dim strPattern As String
    Dim strBody As String
    Dim strReplace As String

    strPattern = "Order \d+"
    strReplace = "<a href='http://something.com/order.html\?o=$1'>Order $1</a>"

    Set miMessage = Application.ActiveInspector.CurrentItem
    If miMessage Is Nothing Then Exit Sub
    strBody = miMessage.HTMLBody
    rgx.Pattern = strPattern
    rgx.Global = True
    rgx.IgnoreCase = True
    miMessage.HTMLBody = rgx.Replace(strBody, strReplace)
End Sub

脚本正确找到匹配的“订单12345”实例并插入链接,但是不是“订单12345”,我在URL中获得“订单$ 1”和?o = $ 1。我做错了什么?

1 个答案:

答案 0 :(得分:2)

正则表达式中没有capturing groupback-reference没有任何内容。

改变这个:

strPattern = "Order \d+"

进入这个:

strPattern = "Order (\d+)"

问题就会消失。