我正在尝试对某些 HTML 内容进行正则表达式替换,而我需要做的是将 URL 参数附加到已经存在的用于标记(例如锚标记、链接标记等)的 URL。例如,如果我有一个锚标签,例如
<a href="http://www.google.com">test</a>
它应该变成(附有'?')
<a href="http://www.google.com?append=1">test</a>
但是如果已经有一个 url 参数,它应该只是附加它 - 所以,这个:
<a href="http://www.google.com?s=this&q=test">test</a>
将变成(附加一个'&')
<a href="http://www.google.com?s=this&q=test&append=1">test</a>
我还必须考虑有时可能不一定总是有链接 - 例如
<a href="javascript:doThis('test')">test</a>
在这种情况下,我必须不管它。
javascript中可能还嵌入了一个链接,例如:
<a href="javascript:doThis('http://www.google.com')">test</a>
<a href="javascript:window.open('newWindow','http://www.google.com')">test</a>
这也应该像这样被替换(使用“&”或“?”):
<a href="javascript:doThis('http://www.google.com?append=1')">test</a>
<a href="javascript:window.open('newWindow','http://www.google.com?append=1')">test</a>
(这个没那么重要——没有这个我也能活)
此外,链接可能并不总是有 http:// - 它可能只是一个相对链接:
<a href="/home.aspx?s=this&q=test">test</a>
它应该像以前一样附加:
<a href="/home.aspx?s=this&q=test&append=1">test</a>
我尝试了以下 - 第一个也替换了所有 javascript 链接,以及任何其他链接(不是真正的 URL)。第二个根本不工作...
content = Regex.Replace(content, "href=\"(.*)\\?(.*)\"", "href=\"$1?append=1&$2\"", RegexOptions.IgnoreCase);
content = Regex.Replace(content, "href=\"([^?]*)\"", "href=\"$1?append=2\"", RegexOptions.IgnoreCase);
编辑:我已经尝试过使用 HTML Agility 包,只是我得到的 HTML 格式不正确,所以它不起作用。此外,我得到的 HTML 不是一个衬里,它是我必须为此做的一整页......