Tom*_*len 3 regex vbscript replace asp-classic
我不知道为什么这只适用于找到的最后一个实例,而不是我所期望的全部实例.任何帮助赞赏.
输入字符串:
<a href="http://www.scirra.com" target="_blank" rel="nofollow">http://www.scirra.com</a><br /><br />
<a href="http://www.scirra.com" target="_blank" rel="nofollow">http://www.scirra.com</a><br /><hr>
Run Code Online (Sandbox Code Playgroud)
正则表达式:
'SEO scirra links
Dim regEx
Set regEx = New RegExp
' BB code urls
With regEx
.Pattern = "<a href=\""http://www.scirra.com([^\]]+)\"" target=\""_blank\"" rel=\""nofollow\"">"
.IgnoreCase = True
.Global = True
.MultiLine = True
End With
strMessage = regEx.Replace(strMessage, "<a href=""http://www.scirra.com$1"" target=""_blank"" title=""Some value insert here"">")
set regEx = nothing
Run Code Online (Sandbox Code Playgroud)
输出:
<a href="http://www.scirra.com" target="_blank" rel="nofollow">http://www.scirra.com</a><br /><br />
<a href="http://www.scirra.com" target="_blank" title="Some value insert here">http://www.scirra.com</a><br /><hr>
Run Code Online (Sandbox Code Playgroud)
任何人都可以阐明为什么它只是将标题添加到最后找到的实例?(我已经测试过更多,总是适用于最后一个)
正是因为你的正则表达式:
...a.com-->([^\]]+)<--
Run Code Online (Sandbox Code Playgroud)
您尝试匹配]输入中不是一次或多次的所有内容.而且由于]你的输入中根本没有,它会吞下一切(是的,甚至是换行符),但必须回溯以满足你的正则表达式的其余部分,这意味着它回溯到最后一次出现" target="_blank" .....
如果要替换rel="nofollow"并允许后面的任何路径http://www.scirra.com,则可以使用此正则表达式:
(<a href="http://www\.scirra\.com((/[^/"]+)*/?)" target="_blank" )rel="nofollow">
Run Code Online (Sandbox Code Playgroud)
并用以下内容替换:
$1title="Some value insert here">
Run Code Online (Sandbox Code Playgroud)
复制/粘贴您当前的代码:
Dim regEx
Set regEx = New RegExp
' BB code urls
With regEx
.Pattern = "(<a href=""http://www\.scirra\.com((/[^""/]+)*/?)"" target=\""_blank\"" )rel=\""nofollow\"">"
.IgnoreCase = True
.Global = True
.MultiLine = True
End With
strMessage = regEx.Replace(strMessage, "$1title=""Some value insert here"">")
Run Code Online (Sandbox Code Playgroud)
但请注意,在替换的URL中这是非常严格的限制.例如,目标内容是否可能是其他内容,或者有更多属性?