使用RegEx使用超链接替换Outlook电子邮件正文中的多个字符串

时间:2016-03-25 19:27:33

标签: regex vbscript hyperlink outlook rules

当电子邮件附带包含5个数字字符串的正文时,我想用URL替换它以创建指向该记录的可点击链接。请参阅以下代码:

我有两个问题。

  1. 使用下面的代码,我只会在每封进来的电子邮件中替换一个字符串。所以,如果我有一套4个五个数字的ID,那么只有一个会被转换进入超链接。

  2. 该脚本似乎破坏了传入电子邮件的所有格式。理想情况下,我想要更改的是将5号字符串转换为超链接,其余格式应保持不变,零换行符或回车符等...

    Option Explicit
    
    Sub InsertHyperLink(MyMail As MailItem)
        Dim body As String, re As Object, match As Variant, slgLink As String
        body = MyMail.body
        slgLink = "http://lnet/servicelog/serviceLogInfo.jsf?slNumber="
    
        Set re = CreateObject("vbscript.regexp")
        re.Pattern = "[0-9][0-9][0-9][0-9][0-9]"
    
        For Each match In re.Execute(body)
            body = Replace(body, match.Value, "<p><a href=" & Chr(34) & slgLink & Right(match.Value, 5) & Chr(34) & ">" & Right(match.Value, 5) & "</a></p>", 1, -1, vbTextCompare)
        Next
    
        MyMail.HTMLBody = body
        MyMail.Save
    End Sub
    

2 个答案:

答案 0 :(得分:0)

您正在阅读纯文本Body属性,但您正在设置HTMLBody。请改为阅读HTMLBody。

答案 1 :(得分:0)

\u\pmo86的帮助下找到解决方案,这里有正确的方法(更优雅):

Sub InsertHyperLink(MyMail As MailItem)
    Dim slgLink As String, re As Object
    slgLink = "<a href=""http://lnet/servicelog/serviceLogInfo.jsf?slNumber=$1"">$1</a>"

    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "(\b(\d{5})\b)"
    re.Global = True

    MyMail.HTMLbody = re.Replace(MyMail.HTMLbody, slgLink)
    MyMail.Save
    Set re = Nothing
End Sub

正如您在示例中所看到的,它使用内置函数来反向引用$ 1,它直接引用匹配。