C# 正则表达式查找带有特殊href的锚链接?
我只需要为以下内容找到一个正则表达式: 我在C# 正则表达式查找带有特殊href的锚链接?,c#,regex,C#,Regex,我只需要为以下内容找到一个正则表达式: 我在div标签中有一些内容,其中包括很多锚链接。因此,我的任务是查找href格式为“components/showdoc.aspx?docid=”的锚定链接,然后仅为该锚定链接添加onclick事件,保留其余锚定链接 <div id="content" runat="server"> <a href="www.xxxx.com/components/showdoc.aspx?docid=100">test doc</a
div
标签中有一些内容,其中包括很多锚链接。因此,我的任务是查找href
格式为“components/showdoc.aspx?docid=”的锚定链接,然后仅为该锚定链接添加onclick
事件,保留其余锚定链接
<div id="content" runat="server">
<a href="www.xxxx.com/components/showdoc.aspx?docid=100">test doc</a>
</div>
此表达式提供并向其添加目标
RegEx.Replace(inputString, "<(a)([^>]+)>", "<$1 target=""_blank""$2>")
RegEx.Replace(inputString,“]+)>”,“”)
谢谢不要使用正则表达式来解析html,这是邪恶的 你可以用这个,它甚至有一个漂亮的 或者,您可以使用一行jQuery在客户端执行此操作:
$('a[href*="components/showdoc.aspx?docid="]').on('click', myClickFunction);
这是在利用
如果要在单击函数中查找docid,可以在单击函数中编写如下内容:
function myClickFunction(e){
var href = $(this).attr('href');
var docId = href.split('=')[1];
alert(docId);
}
请注意,这假设只有一个查询字符串值,如果您想使其更健壮,可以执行以下操作:如果您希望对HTML文件进行永久性更改,请首先通过将其加载到
System.Windows.Forms.WebBrowser
控件来管理HTML解析。从那里,您可以对HTML执行类似DOM的修改,而不会因对原始文件执行Regex.Replace
而产生解析损坏的危险后果。(显然,对于某些人来说,RegEx+HTML是一个严重的问题)
因此,首先在代码中,您将:
WebBrowser myBrowser = new WebBrowser();
myBrowser.URL = @"C:\MyPath\MyFile.HTML";
HtmlElement myDocBody = myBrowser.Document.Body;
然后,您可以通过使用HtmlElement.Id
属性和HtmlElement.GetAttribute
方法浏览文档正文,查找div
标记并查找锚定标记
注意:仍然可以在URL字符串上使用正则表达式匹配,但只能在从GetAttribute(“href”)
方法中提取它们之后使用
要添加onClick
方法,只需调用HtmlElement.SetAttribute
方法
完成所有修改后,通过将WebBrowser.DocumentText
写入文件来保存更改
以下是参考资料:
无法保持已太迟。您的onclick事件是客户端事件,对吗?javascript解决方案可以接受吗?我同意@Zeus。我会使用jQuery来做这件事。我想这样做:$('a[href*=“components/showdoc.aspx?docid=“]”)。on('click',myClickFunction);但我的问题是如何在onclick函数中访问该文档id?这是有道理的,但是有没有办法从该url获取文档id并在onclick函数中使用它?@user1542851,我已经更新了我的答案,以显示如何获取所单击链接的href,然后找到查询字符串值。