HTML якорь заменить на RegEx - PullRequest
3 голосов
/ 14 ноября 2009

У меня есть данные HTML, которые я буду использовать в клиентском приложении. Мне нужно Regex.Заменить теги <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 ]

4 голосов
/ 14 ноября 2009

В C # вы можете использовать такой код:

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

Он вернет строку, которая соответствует тому, что вам требуется.

1 голос
/ 14 ноября 2009

В общем случае лучше не анализировать HTML с помощью регулярных выражений. Попробуйте вместо этого Html Agility Pack .

0 голосов
/ 14 ноября 2009

Если вы настаиваете на использовании 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 и без него будут отправлены в Бахай (если это то, что делает ваш метод процесса):)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...