2009-06-03 60 views
1

我想在任何包含mailto:標籤的href中爲onclick事件添加調用。使用正則表達式替換子字符串

舉例來說,我想拿的任何實例:

<a href="mailto:[email protected]"> 

並修改爲:

<a href="mailto:[email protected]" onclick="return function();"> 

說我遇到的問題是,郵寄地址字符串的值不一致。

我需要說一些類似'<a href="mailto:*">'的字符串替換'>'字符的所有實例'onclick="return function();">'。

我在ColdFusion中使用REreplacenocase()函數執行此操作,但歡迎使用一般的RegEx建議。

+2

<插入強制性>不要嘗試用正則表達式解析非常規語言(例如HTML)!「在這裏評論> – Svante 2009-06-03 20:31:44

回答

3

下面將你的onclick添加到所有郵寄地址withing字符串str包含的鏈接:

REReplaceNoCase(
    str, 
    "(<a[^>]*href=""mailto:[^""]*""[^>]*)>", 
    "\1 onclick=""return function();"">", 
    "all" 
) 

什麼這個正則表達式會做的就是找到任何<a ...>標記,它看起來像它的電子郵件鏈接(即具有使用href屬性的郵寄地址p rotocol),併爲其添加onclick屬性。直到標籤末尾的所有東西都將被存儲到第一個回退(在替換字符串中由\ 1引用),以便保留<a>中的任何其他屬性。

2

如果這個的唯一目的是添加一個JavaScript事件處理程序,我不認爲正則表達式是最好的選擇。如果您使用JavaScript來連接JavaScript事件,那麼如果JS不可用(例如,沒有任何事情會發生,而不是在整個標記中分散),您將會獲得更優雅的降級。

另外,使用DOM消除缺失匹配或誤報,可以從正則表達式不完全預見每一個可能的標記形成發生的可能性:

function myClickHandler() { 
    //do stuff 
    return false; 
} 

var links = document.getElementsByTagName('a'); 
for(var link in links) { 
    if(link.href.indexOf('mailto:') == 0) { 
     link.onclick = myClickHandler; 
    } 
} 
1

爲什麼你不會在前端使用類似jQuery這樣的庫來執行此操作?

$(function(){ 
$("a[href^=mailto]").click(function(){ 
    // place the code you want to execute here 
}) 
});