我只需要找到以下的正则表达式:
我在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>")
由于
答案 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