我正在尝试将ASA #### @@@中的文本替换为ASA #### @@(超链接)

我的代码可以在体内只有一种模式的情况下工作。

但是如果我有很多像

ASA3422df
ASA2389ds
ASA1265sa

整个身体被替换为

ASAhuyi65

我的代码在这里。

Dim strID As String
Dim Body As String
Dim objMail As Outlook.MailItem
Dim temp As String
Dim RegExpReplace As String
Dim RegX As Object
strID = MyMail.EntryID

Set objMail = Application.Session.GetItemFromID(strID)
Body = objMail.HTMLBody
Body = Body + "Test"
objMail.HTMLBody = Body

Set RegX = CreateObject("VBScript.RegExp")
With RegX
.Pattern = "ASA[0-9][0-9][0-9][0-9][a-z][a-z]"
.Global = True
.IgnoreCase = Not MatchCase
End With
'RegExpReplace = RegX.Replace(Body, "http://www.code.com/" + RegX.Pattern + "/ABCD")

'if the replacement is longer than the search string, future .FirstIndexes will be off
Offset = 0
'Set matches = RegX.Execute(Body)

For Each m In RegX.Execute(Body)
    RegExReplace = "<a href=""http://www.code.com/" & m.Value & """>" & m.Value & "</a>"
Next

Set RegX = Nothing
objMail.HTMLBody = RegExReplace
objMail.Save
Set objMail = Nothing
End Sub

最佳答案

看起来您原来在正确的轨道上被注释掉了。使用Replace方法,不需要循环匹配(这就是Global标志的作用),并且可以使用诸如$1$2等的反向引用作为匹配子字符串的占位符。与大多数语言一样,VBScript也有a dedicated page on Regular-Expressions.info

以下内容可满足您的需求:

body = "Blah blah ASA3422df ASA2389ds ASA1265sa"
body = RegX.Replace(body, "<a href='http://www.code.com/$1'>$1</a>")
Debug.Print body
'-> Blah blah <a href='http://www.code.com/ASA3422df'>ASA3422df</a> <a href='http://www.code.com/ASA2389ds'>ASA2389ds</a> <a href='http://www.code.com/ASA1265sa'>ASA1265sa</a>

这会将匹配项(仅匹配项)替换为链接,并保持所有其他内容不变。

10-06 05:11