2011-08-22 4 views
0

WMD showdown.js 파일에서이 정규식 패턴을 얻었습니다. 그것은 그대로 원래의 텍스트 값 (http://www.google을 반환하이퍼 링크를 탐지하는 정규식

text = text.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,"<a href=\"$1\">$1</a>"); 

을하지만 http://www.google.comtext를 설정할 때, 그것을 고정하지 않습니다

/<((https?|ftp|dict):[^'">\s]+)>/gi 

와 코드입니다. com).

P.S : RegexPal으로 테스트했으며 일치하지 않습니다.

+2

<> 출력을 가져 가면 정상적으로 작동합니다. (http | ftp | https) : \/\/[\ w \ -_] + (\. [\ w \ -_ ] +) + ([\ w \ - \., @?^= % & :/~ \ + #] * [\ w \ - \ @?^= % &/~ \ + #]? : //regexlib.com/Search.aspx? k = URL & AspxAutoDetectCookieSupport = 1 – Rob

+1

누군가가 정규 표현식과 HTML에 대해 질문을 한 마지막 순간에 화를 냈습니다. http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 –

+0

전체 URL을 가져 와서 앵커 태그에 넣기 만하면됩니다. ? 귀하의 예제에서 'http://www.google.com'을 반환해야합니까? – Ali

답변

0

만큼 당신이 HTTP를 사용하여 URL의 시작을 알고 : 당신이이 <>를 검색하지 않으려면

그냥 /((https?|ftp|dict):[^'">\s]+)/gi로 변경 // 또는 https : // 또는 사용할 수있는 어떤 :는 URL의 예에서 허용되지 않는 문자가 A-Za-z\.\-하지 발생까지

/((https?|s?ftp|dict|www)(://)?)[A-Za-z0-9.\-]+)/gi 

표현은 일치합니다. 그러나 어떤 형태로든 google.com이나 매개 변수 나 하위 디렉토리 경로 등 도메인 이름 다음에 나오는 어떤 것도 감지하지는 않습니다. 위와 같이 종료 조건을 정규식에서 종결하기 만하면됩니다.

나는 그것이 무의미한 것처럼 보일 수 있지만 복잡한 URL의 경우에는 전체 URL이 아닌 축약 된 표시 이름을 원할 경우 유용 할 수 있습니다.

+0

URL에 유효한 다른 문자가 많이 있지만 공백 이외의 다른 문자는 거의 허용됩니다. – RobG

+0

국제화 된 도메인 이름을 무시합니다. 기본적으로 'A-Za-z0-9 \'만 도메인 이름에 허용됩니다. - 선두 또는 마지막 문자가 될 수 없습니다. LordCover (asker)는 시리아 출신이기 때문에 정말 일하는 것을 결정할 것입니다. 어느 쪽이든,이 정규식은 시작하는 데 필요하지 않은 도메인 이름을 추출하는 데 유용합니다. (유효한 문자를보십시오 http://en.wikipedia.org/wiki/Domain_name) – Ali

0

당신은 사용할 수 있습니다

var re = /(http|https|ftp|dict)(:\/\/\S+?)(\.?\s|\.?$)/gi; 

로 :

el.innerHTML = el.innerHTML.replace(re, '<a href=\'$1$2\'>$1$2<\/a>$3'); 

는 문장의 끝 부분에 URL을 일치.

하지만이 기술에 매우주의해야합니다. 요소의 내용이 복잡한 텍스트가 아닌 복잡한 텍스트인지 확인하십시오. 정규 표현식은 HTML을 처리하거나 구문 분석하기위한 것이 아니며 HTML을 잘 처리하거나 파싱하지 않습니다.

관련 문제