classic asp regex replace vbscript asp-classic

regex - asp - replace in vbscript



asp/vbscript clásico-modifique todos los hrefs con expresiones regulares (1)

En Classic ASP (VB Script), necesito modificar varios hrefs distintos que están contenidos en una cadena codificando la url actual y pendiente de ella.

Básicamente, quiero hacer que todos los hrefs pasen por mi redirect.asp y pasen el href existente codificado en el nuevo enlace.

Por ejemplo:

existente:

<a href="http://www.dairyqueen.com/us-en/Promotions-US/?localechange=1&test=1">

resultado deseado:

<a href="/redirect.asp?id=123&url=http%3A%2F%2Fwww.dairyqueen.com%2Fus-en%2FPromotions-US%2F%3Flocalechange%3D1%26test%3D1">

Tenga en cuenta que hay múltiples href distintos contenidos en la cadena. Todos ellos deben ser reemplazados.

Además, también me gustaría agregar atributos adicionales dentro del href, que probablemente podría hacer simplemente usando un replace(myString,"<a href","<a target=""_blank"" href=") a menos que haya una mejor manera.

resultado óptimo:

<a target="_blank" href="/redirect.asp?id=123&url=http%3A%2F%2Fwww.dairyqueen.com%2Fus-en%2FPromotions-US%2F%3Flocalechange%3D1%26test%3D1">


Eche un vistazo al siguiente código:

'' <a href="http://www.dairyqueen.com/us-en/Promotions-US/?localechange=1&test=1"> sHtml = "<a href=""http://www.dairyqueen.com/us-en/Promotions-US/?localechange=1&test=1"">" Set refRepl = GetRef("fnRepl") With CreateObject("VBScript.RegExp") .Global = True .MultiLine = True .IgnoreCase = True .Pattern = "<a([/s/S]*?)href=""([/s/S]*?)""([/s/S]*?)>" sResult = .Replace(sHtml, refRepl) End With '' <a target="_blank" href="/redirect.asp?id=123&url=http%3A%2F%2Fwww.dairyqueen.com%2Fus-en%2FPromotions-US%2F%3Flocalechange%3D1%26test%3D1"> MsgBox sResult Function fnRepl(sMatch, sSubMatch1, sSubMatch2, sSubMatch3, lPos, sSource) fnRepl = "<a" & sSubMatch1 & "target=""_blank"" href=""/redirect.asp?id=123&url=" & EncodeUriComponent(sSubMatch2) & """" & sSubMatch3 & ">" End Function Function EncodeUriComponent(sText) With CreateObject("htmlfile") .ParentWindow.ExecScript (";") EncodeUriComponent = .ParentWindow.EncodeUriComponent(sText) End With End Function