Ian Vink
Ian Vink

Reputation: 68840

HTML anchor replace with RegEx

I have HTML data which I'll be using in a client app. I need to Regex.Replace the <a> tags from

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

to

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

In C# using RegExReplace with a regex similar to

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

Ideas?

Upvotes: 3

Views: 2858

Answers (3)

user156862
user156862

Reputation:

In C# you could use code like this:

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

It will return a string that matches what you require.

Upvotes: 4

AndreasKnudsen
AndreasKnudsen

Reputation: 3491

If you insist on using javascript to get people to visit Bahai.aspx, then people without javascript won't get there. Could you use javascript to do the rewrite instead, for instance in jquery?

Let's say you tag the anchor tags with class="doProcess" then you could use the following jQuery script to change the links:

$(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;
    });
  });
});

then both the users with javascript and without will get sent to Bahai (if that is what your process method does) :)

Upvotes: 0

TrueWill
TrueWill

Reputation: 25573

In general, it's best not to parse HTML with regular expressions. Try the Html Agility Pack instead.

Upvotes: 1

Related Questions