2009-06-03 6 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

답변

3

을 흔한 문자열 str withing에 포함 된 링크 :.

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

무엇을 할 것인가이 정규 표현식이 이메일의 링크처럼 보이는 어떤 <a ...> 태그를 찾을 수있다 (즉,이 사용 href 속성 흔한 P rotocol), onclick 속성을 추가하십시오. 태그 끝까지의 모든 내용은 <a>의 다른 속성이 보존되도록 첫 번째 역방향 참조 (대체 문자열에서 \ 1로 참조)에 저장됩니다.

2

JavaScript 이벤트 핸들러를 추가하는 것이 유일한 목적이라면 Regex가 최선의 선택이라고 생각하지 않습니다. 자바 스크립트를 사용하여 자바 스크립트 이벤트를 연결하면 JS를 사용할 수없는 경우 (예 : 마크 업에 흩어져있는 onclick cruft를 사용하는 대신 아무 일도 일어나지 않을 경우)보다 우수한 품질 저하가 발생합니다.

게다가, DOM을 사용하여 완벽하게 모든 가능한 마크 업 형성을 예상하지 않는 정규식에서 발생할 수없는 일치 또는 오탐 (false positive)의 가능성을 제거

: 다음은 모든 당신의 onclick을 추가합니다

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 
}) 
}); 
관련 문제