使用特殊href查找锚链接的正则表达式?

时间:2012-08-24 15:44:23

标签: 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>

此表达式为其提供并添加目标。

RegEx.Replace(inputString, "<(a)([^>]+)>", "<$1 target=""_blank""$2>")

由于

2 个答案:

答案 0 :(得分:0)

不要使用正则表达式来解析HTML,这是邪恶的。

你可以使用HTML Agility Pack,它甚至有一个很好的NuGet Package

或者,您可以在客户端使用一行jQuery执行此操作:

$('a[href*="components/showdoc.aspx?docid="]').on('click', myClickFunction);

这是利用Attribute Contains Selector

如果您想在点击功能中找到docid,可以在点击功能中写出类似的内容:

function myClickFunction(e){
    var href = $(this).attr('href');
    var docId = href.split('=')[1];
    alert(docId);
}

请注意,这假设只有一个查询字符串值,如果您想让它更强大,您可以执行以下答案:https://stackoverflow.com/a/1171731/21200

答案 1 :(得分:0)

如果您要对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;

然后,您可以浏览文档正文,找到div标记,并使用HtmlElement.Id属性和HtmlElement.GetAttribute方法查找锚标记。

注意:在URL字符串上仍然可以使用RegEx匹配,但只能在从GetAttribute("href")方法中提取后才能使用。

要添加onClick方法,只需调用HtmlElement.SetAttribute方法。

完成所有修改后,请将WebBrowser.DocumentText写入文件保存更改。

这是一个参考: http://msdn.microsoft.com/en-us/library/system.windows.forms.htmlelement.aspx