2012-01-17 9 views
1

에 맞게 내가 URL을 감지 할 수있는 다음과 같은 정규 표현식이 있습니다정규식 표현은 URL을

/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig 

그러나,이 같은 www.google.catlk.tc/ApSE 같은 URL을 감지하지 않습니다. 이 URL을 감지 할 수있는 정규식이 있습니까? 나는 자바 스크립트를 사용하고있다.

+1

[이 링크] (https://www.google.com/search?q=javascript+url+regex) (google : javascript url regex)를 사용해보세요. – maerics

+0

중요한 ftp 연결은 안전 할 수도 있고 ('ftps','sftp'),'file :'은 윈도우에서'file : ///'을 세 개 필요합니다. – noob

+0

"www.google.ca"는 URL이 아니며 FQDN입니다 . – Johnsyweb

답변

0

이 표현은 원하는 것을 수행합니다. 그것은이 정규 표현식이 일치하는 유효한 URL 아니지만, 사용자의 요구 사항에 맞는 :

/(\b(https?|ftp|file):\/\/|\bwww\.[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])|([\S]+\.([a-z]{2,})+?\/[\S]+)/gi 
+0

이 코드는 http://www.google.ca를 제외하고 두 개의 URL로 계산됩니다 (작성한 코드에 따르면). 왜 이렇게합니까? – Nitrodbz

+0

도메인 뒤에 슬래시가 필요합니다. 귀하의 요구 사항은'www.google.ca and tlk.tc/ApSE'입니다. www. 또는 슬래시와 적어도 하나의 문자가 누락되었습니다. – Armin

+0

어떻게하면 표현식을 변경하여 http : //를 감지하고 www가 바로 나오는 경우 두 개로 분리하는 대신 하나의 url을 사용할 수 있습니까? – Nitrodbz

3

편집 :

이 하나를 시도

((\b(https?|ftp|file):\/\/)?[-A-Z0-9+&@#\/%?=~_|!:,.;]+\.[-A-Z0-9+&@#\/%=~_|]+) 

그것은 계획이 선택한다을, 당신이 보여준 두 가지 사례를 뒷받침 할 수 있습니다.

URL에 대한 IETF RFC-2396 구문 분석 URL을에 대한 다음과 같은 정규 표현식 을 제공합니다

다음과 같은 구성 요소에 캡처 그룹을 매핑
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 

: 예 당신이 줄 것을

scheme = $2 
authority = $4 
path  = $5 
query  = $7 
fragment = $9 

주 , www.google.catlk.tc/ApSE은 "유효한"URL이 아니지만 어쨌든 정규식과 일치한다고 생각합니다.

+0

나는이 표현을 다음과 같이 테스트했다 : http://gskinner.com/RegExr/ 어떤 도메인에서도 작동하지 않는다. – Armin

+0

맞아 ... IETF 문서를 잘못 읽었다. 이 정규식은 URL을 파싱하지 않고 파싱하는 데 사용됩니다. 내 대답을 업데이트 할게. – Jonathan

+0

? (([^ : /? \ #] +) :)? (// ([^ /? \ #] *))? ([^ \? \ #] *) \ #] *))? (\ # (. *))? '를 입력하십시오. –