-1

我只需要为以下内容找到一个正则表达式:

我在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>")

谢谢

4

2 回答 2

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

于 2012-08-24T16:25:39.793 回答
0

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

您可以使用HTML Agility Pack,它甚至还有一个不错的NuGet 包

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

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

这是利用Attribute Contains Selector

如果你想在你的 click 函数中找到 docid,你可以在你的 click 函数中写这样的东西:

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

请注意,这假设只有一个查询字符串值,如果你想让它更健壮,你可以在这个答案中做类似的事情:https ://stackoverflow.com/a/1171731/21200

于 2012-08-24T15:57:23.503 回答