2012-07-23 7 views
0

내가 정규식 문자열이 자바 스크립트에서 교체와 이상한 문제에 봉착했습니다.자바 스크립트 URL 검색 정규식

/(?:https?:\/\/|www\.)\S+/gi

내가 그것을 단 하나 개의 URL을 일치 문제로 실행 해요 그러나 : 나는 (예를 들어, 댓글 또는 게시물) 여러 URL의를 포함 할 수있는 문자열에서 URL의 검색이 정규식이 ... 그렇지 않을 때를 제외하고. 그것은 이상한 일이지만, 일반적으로 하나의 URL (항상 첫 번째 URL 일 필요는 없음) 만 일치시킵니다. 이 문자열을 가지고 :

"Test 

http://google.com 
http://google.com 

http://google.com" 

그것은 첫 번째 http://google.com 인스턴스를 일치합니다.

str = str.replace(/(?:https?:\/\/|www\.)\S+/gi, '<a href="$&" target="_blank">$&</a>'); 
내가 일치되는 내용의 더 나은 아이디어를 얻을이 사용하고

하고 무엇을하지 않습니다 :

최종 목표는 링크 URL의를 대체하는 것입니다

function getMatches(re, str) { 
    var matches = [], 
     match; 

    while ((match = re.exec(str)) !== null) { 
     matches.push(match[0]); 
    } 

    return matches; 
} 

누구나 알고 내가 여기서 뭐하고 있는거야?

편집 : 문제를 일으키는 내 데이터를 계속 뭔가 재미가있을 것 같습니다. 잘

답변

0

이 시도는

str.replace(/(https?\:\/\/[^\s]+)/gi, '<a href="$1" target="_blank">$1</a>'); 
+0

내 실수는 질문에 잘못 입력했습니다. 결정된. – coreyschram

0

그냥 일치하는 목록을 원한다면, 당신은 String.match보다는 RegExp.exec를 사용하여 시도 할 수 있습니다. 당신이 그것을 포기 할 가능성이

function getMatches(re, str) { 
    var matches = str.match(re); 
    return matches == null ? [] : matches; 
} 

을 또는 :

var matches = str.match(/(?:https?:\/\/|www\.)\S+/gi) || []; 

당신은 또한, such as yours 빠르게 테스트 패턴을 RegexPal 같은 도구를 체크 아웃 할 수 있습니다

getMatches에 단순화 할 수 있습니다. 나는 실제로 그것을 사용하고

+0

실제로 g 플래그를 사용하여 정규 표현식으로 작업 할 때 필요합니다. 당신이 모든 경기를 얻기 위해 null을 반환 할 때까지 통해 볼 필요가 있도록 간부의 각각의 연속적인 호출은, 각 경기 (경기 후 모든 캡처 괄호)에 대한 결과 배열을 반환합니다. – coreyschram

+0

@coreyschram Ah. 죄송합니다. 내가 생각하고 있었는데 ['match'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/match)하는 글로벌 플래그, 문자열에서 모든 일치를 반환합니다. –