我正在尝试为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。我做错了什么?
答案 0 :(得分:2)
正则表达式中没有capturing group,back-reference没有任何内容。
改变这个:
strPattern = "Order \d+"
进入这个:
strPattern = "Order (\d+)"
问题就会消失。