2011-07-18 5 views
0

웹 콘텐츠의 일부 링크와 일치시키고 싶습니다. 나는 PHP에서 이것을하기 위해 file_get_contents (url)을 사용할 수 있다는 것을 알고있다. 자바 스크립트는 어떻습니까? 정규 표현식에 대한 , 자바 스크립트 정규 표현

<a href="someurl/something" id="someid">contents</a> 

처럼 어떻게 (욕심하지 않는 한 번만 일치)이 일치하도록 JS에게 정규 표현식을 사용할 수 있습니다. 나는 이것을 사용하려고 시도한다.

/^\<a href=\"someurl\/something\" id=\"someid\"\>(+?)\<\/a\>$/ 

그러나 작동하지 않는다. 누군가 도움을 줄 수 있습니까? 감사합니다.

+3

정규 표현식을 사용하고 싶지 않습니다. 그건 그렇고, 오류가 누락 된 점입니다 :'(+?)'대신'(. +?)'는 정규 표현식을 구문 적으로 유효하게 만듭니다. (슬래시 이전의 모든 백 슬래시는 필요하지 않습니다.) –

답변

0

DOM 및 jQuery를 제안 더 나은하지만 여전히 정규식을 사용하려면 다음이 시도 :

/^<a href=".*?" id=".*?">(.*?)<\/a>$/ 
+0

eacape 할 필요가 없습니까? \ ", \ < – nich

+1

"/ "문자를 제외하고는 탈출 할 필요가 없습니다. 데모 [here] (http://jsfiddle.net/GcB8k/)를 확인하십시오. –

4

정규식으로 HTML을 구문 분석하는 것이이 문제를 해결하는 최적의 방법은 아니며, 페이지의 실제 DOM에 액세스 할 수있는 경우 DOM 메서드를 사용해야합니다. 에서와 같이

document.getElementById('someid').innerHTML // this will return 'contents' 

대신 정규식을 사용해야합니다.

3

jQuery와 같은 라이브러리를 사용하여 요소를 얻은 다음 .text() 호출을 통해 내용을 가져 오는 것이 좋습니다. regex로 HTML을 파싱하는 것보다 훨씬 간단하고 신뢰할 수 있습니다.

+2

jQuery를 사용해야하는 이유? 나는 jQuery가 가장 단순한 것에 권장되고 있다는 것을 계속해서 알고있다. 브라우저 질의가 없거나, 우아함이 부족하거나 그것을 필요로하는 것이 없다. 개인적으로, 나는 이것을 위해 네이티브 DOM API를 사용하고 싶습니다. –

+0

@Delan Azabani -이 특정 예가 * all * 일 경우 예, DOM이 정상적으로 작동합니다. 하지만 일반적으로 이와 같은 일은 따로 수행되지 않으며 솔직히 jQuery는 함께 작업하기에 좋은 곳입니다. – Amber

0

당신은뿐만 아니라 더 큰 문서에서 jQuery를

var elements = $(html); 
var links = elements.find('a'); 
links.each(function(i, link){ 
    //Do the regexp matching in here if you wish to search for specific urls only 
}); 

와 요소를 만들 수 있습니다, 사용 DOM은 모든 것을 텍스트로 regexping하는 것보다 빠릅니다.

0

이 ~

try { 
    boolean foundMatch = subjectString.matches("(?im)<a[^>]*href=(\"[^\"]*\"|'[^']*'|[^\\s>]*)[^>]*>.*?</a>"); 
} catch (PatternSyntaxException ex) { 
    // Syntax error in the regular expression 
} 

일치 큰 따옴표, 작은 따옴표 빈을 사용해보십시오.

<a href="someurl/something" id="someid">contents</a> 
<a href='someurl/something' id='someid'>contents</a> 
<a href=someurl/something id=someid>contents</a>