【问题标题】:HTML anchor replace with RegEx用正则表达式替换 HTML 锚点
【发布时间】:2009-11-14 16:58:40
【问题描述】:

我有将在客户端应用程序中使用的 HTML 数据。我需要正则表达式。替换来自

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

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

C# 中使用 RegExReplace 和类似于

的正则表达式
<a[^>]*? href=\"(?<url>[^\"]+)\"[^>]*?>(?<text>.*?)</a>

想法?

【问题讨论】:

标签: c# html regex replace


【解决方案1】:

在 C# 中,您可以使用如下代码:

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

它会返回一个匹配你需要的字符串。

【讨论】:

  • JavaScript 区分大小写。 Processprocess 不同。你也不需要标签javascript
  • 我同意你的观点,我只是从现在已更改的问题中复制粘贴 :-) RegexOptions.IgnoreCase 用于忽略输入字符串的大小写,因此这将适用于
【解决方案2】:

一般来说,最好不要用正则表达式解析 HTML。请改用Html Agility Pack

【讨论】:

    【解决方案3】:

    如果您坚持使用 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 和不使用 javascript 的用户都会被发送到 Bahai(如果这是您的处理方法所做的):)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 2011-04-19
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      相关资源
      最近更新 更多