2011-02-03 4 views
3

DOM에서 링크를 확인하고 절대 링크가 아닌 링크를 확인하는 javascript를 만듭니다. 불행하게도 나는 어떤 행운을 가지고 있지 않다 ...상대 링크에 대한 정규 표현식에만 해당

내가 폴더 경로

  1. <a href="somepage.html">link</a>
  2. <a href"http://somesite.net/somepage.html">link</a>

에게 아래 링크의 첫 번째 유형과 일치하고, 추가하고 싶습니다 나는 string.replace(/a.+href="([^http]+)"/, 'path'+$1);을 사용했습니다 ...

누군가 나를 도와 줄 수 있습니까? 미리 감사드립니다.

+1

전반적으로 어떤 문제를 해결하고자 :

나는 ONLY 다음 구문을 사용하여 상대 경로를 대체 할 수 있었다? 아마도 당신이하려고하는 것에 대한 더 간단한 해결책이있는 것처럼 느껴집니다. –

+0

기본적으로 내가 원하는 것은 링크 태그의 상대 경로 만 검사하는 정규 표현식을 사용하여 절대 URL을 피하는 것입니다. – anarchitecton

답변

0

대괄호로 문자 클래스를 만들었습니다. 그들을 제거하십시오. 당신은 "부정적인 lookbehind"를 원한다. 구문에 대한 정보는 아래의 주석을 보라. 모든 정규 표현식 기능이이 정규식 기능을 지원하지는 않습니다.

자바 스크립트는 둘러보기 기능을 지원하지 않습니다. 그래도 도움이 될 수 있습니다. http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

+0

하지만 어떻게 대괄호와 캐럿 문자를 사용하지 않고 href 속성에서 "http"를 무효화 할 수 있습니까? – anarchitecton

+0

"부정적인 lookbehind"로 생각합니다. 정확한 구문에 대한 확신이 없습니다. http://www.regular-expressions.info/lookaround.html – SpliFF

+0

자바 스크립트는 네가티브 모양 *을 지원합니다. –

0

당신은 그냥 거기에 몇 링크 변수를 만들어, 예를 들면 위해

string.replace(/(a.+href=)"(?!http)(.+)"/gi, '$1"path/$2"') 
0

를 사용할 수 있습니다. .replace()를 쉽게 적용하여 링크를 얻을 수 있습니다. 당신은 그냥 정규 표현식을 사용하여 문제를 해결하기 위해 작성한 정규 표현식이 과잉처럼 보이기 시작하면

var content = '<a href="/somepage.html">link</a><a href="http://somesite.net/somepage.html">link</a><a href="somepage.html">link</a>'; 

// whatever you want to prefix link with 
var base='http://somsite.net'; 

content = content.replace(/(href=")(?!https?:\/\/)([^"]*)/gi,'$1'+base+'/$2').replace(/\/+/g,'/'); 
+0

이 정규 표현식은 절대 경로를 피하면서 상대 경로 만 대체합니까? – anarchitecton

+0

href = "를 찾은 다음 모든 것을 다음과 일치시킵니다."그러나 href = 뒤에 나오는 것은 http : // 또는 https : //로 시작하지 않으며 발견 한 경우 URL 앞에 접두사가 붙습니다 그 기본 변수에있는 것이 무엇이든간에.또한 예를 들어 상대 URL이 /로 시작하지 않는 경우 // 발생할 수있는 double //을 대체하는 replace()가 추가로 필요합니다. –

2

는, 그것은 아마도 과잉이다. 때로는 정규 표현식과 함께 사용하는 간단한 if 문은 경이로움을 수행 할 수 있습니다

$("a").each(function() { 
    if (!/^http:\/\//.test(this.href)) { 
     this.href = "http://example.com/folder/" + this.href; // etc. 
    } 
}); 
0

모두에게 감사를.

var basepath = "pathto/"; 
var html = html.replace(/(<(a|img)[^>]+(href|src)=")(?!http)([^"]+)/g, '$1'+basepath+'$4'); 
관련 문제