2009-11-14 55 views
3

我有HTML數據,我將在客戶端應用程序中使用。我需要使用REGEXREPLACE用正則表達式類似從用正則表達式代替HTML錨點

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

Regex.Replace的<a>標籤

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

C#

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

想法?

+3

我敢打賭,C#有某種HTML解析器,您應該更好地使用它來代替正則表達式。順便說一句,你還應該使用'href =「Bahai.asp」onclick =「process(this.href); return false」'。 – Gumbo 2009-11-14 17:04:52

+0

/我wee̡̧̦̪̮͠ps – bobince 2009-11-14 18:11:20

+0

可能的重複[你能提供一些爲什麼很難解析XML和HTML與正則表達式的例子嗎?](http://stackoverflow.com/questions/701166/can-you-provide-some-例如爲什麼它很難解析xml和html-with-a-rege) – 2011-07-09 20:56:06

回答

3

在C#中,你可以使用這樣的代碼:

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

它會返回一個匹配字符串你需要什麼。

+0

JavaScript區分大小寫。 'Process'與'process'不一樣。你也不需要標籤'javascript'。 – Gumbo 2009-11-14 17:20:35

+0

我同意你的看法,我只是從現在已經改變的問題複製粘貼:-) RegexOptions.IgnoreCase用於忽略輸入字符串的情況,所以這將與 2009-11-14 17:28:20

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和沒有用戶將被髮送到巴哈(如果是你的程序方法一樣):)