HTML锚点替换为RegEx

时间:2009-11-14 16:58:41

标签: c# html regex replace

我有HTML数据,我将在客户端应用中使用。我需要Regex.Replace来自

<a>标签
<a href="Bahai.aspx">Bahai</a>

<a href="#" onclick="process('Bahai.aspx');return false;">Bahai</a>

C#中使用RegExReplace,其正则表达式类似于

<a[^>]*? href=\"(?<url>[^\"]+)\"[^>]*?>(?<text>.*?)</a>

想法?

3 个答案:

答案 0 :(得分:4)

在C#中你可以使用这样的代码:

Regex.Replace("<a href=\"Bahai.aspx\">Bahai</a>", 
            "<a href=\"(.+?)\">(.+?)</a>", "<a href=\"#\" onclick=\"process('$1');return false;>$2</a>",
            RegexOptions.IgnoreCase);

它将返回符合您要求的字符串。

答案 1 :(得分:1)

通常,最好不要使用正则表达式解析HTML。请改为使用Html Agility Pack

答案 2 :(得分:0)

如果你坚持使用javascript让人们访问Bahai.aspx,那么没有javascript的人将无法到达那里。您是否可以使用javascript进行重写,例如在jquery中?

假设您使用class="doProcess"标记锚标记,然后您可以使用以下jQuery脚本来更改链接:

$(document).ready(function(){
  $('a.doProcess').each(function(){
    var a = $(this);
    var href = a.attr('href');
    a.attr('href','#');
    a.click(function(){
      process(href);
      return false;
    });
  });
});

然后使用javascript和不使用的用户都会被发送到Bahai(如果这是你的处理方法所做的那样):)