블로그 이미지
초딩입맛제주아재
하고 싶은 것만 하며 살고 싶다

calendar

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
2008. 2. 20. 19:18 Programing/HTML/JavaScript/CSS
문자열중에서 URL(그중 프로토콜과 도메인 부분까지만...) 추출해야 하는 작업이 있었습니다.
정규식을 잘 못다뤄서 상당한 시간을 소비했네요;;;
그렇다고 결과가 썩 맘에 들지는 않습니다.
문제점이 많아서....-_-;;





코드는 간단합니다. 몇 시간 쥐어짜낸것 치고는 형편없죠....-_-;;
 
<script>
  function aa(){
      var aa = document.getElementById('aa');
      var patt = /(http(s)?:\/\/)?\w+(\.\w+)+/gi;
      var result = (aa.value.match(patt));

    aa.value = result.join('\n');
}
  </script>
 </head>

 <body>
  <textarea id="aa" cols="100" rows="10">
    * 컴퓨터 싸게 잘 사는 방법 - 가격비교 PC분야 우수업체 아싸컴! 인텔 콘로탑재 PC 최저가 178,500원.
      http://www.assacom.com
    * 컴퓨터전문 쇼핑몰 싸다컴 - 무이자할부, 전국출장A/S, 경품이벤트 무료배송, 특가HP노트북 - 싸다컴
      http://www.ssadacom.com
    * 컴퓨터전문몰 아이프로컴 - 컴퓨터22만원할인, 쿼드 40만원, 전국출장A/S, 본체10만원, USB증정.
      http://www.iprocom.co.kr
    * 인터넷 익스플로러 7 - 지금 업그레이드 하세요. 최신 Google에 최적화된 IE7
      http://www.google.com/toolbar/ie7/
    * 조립컴퓨터 강자 팝콘피씨 - 인텔최신 코어2쿼드 컴퓨터 할인판매 전국 출장A/S 저가 컴퓨터143,500원
      http://www.popcornpc.co.kr/user_pag
  </textarea>
  <input type="button" onclick="aa()">

정말 간단하죠???
풀이를 하자면
(http(s)?:\/\/)? - http 또는 https 프로토콜명이 있어도 그만 없어도 그만. '?' 는 0번 또는 1번 매칭이죠~
\w+ - 알파벳과 숫자로 된 문자열이 1개 이상 매칭~
(\.\w+)+ - .daum 처럼 닷(.) 다음에 문자열로 이루어진 패턴이 1회 이상 매칭

언뜻 보면 잘 되는 것 같습니다만 저 코드는 치명적인 버그를 갖고 있습니다...(그러니 저 코드는 쓰지마시길~^^)



문제점이 보이시나요?
아래와 같은 문제점이 저 코드안에 도사리고 있답니다...

  • www.img-daum.net 같은 하이픈(-)이 들어간  도메인은 추출을 못합니다.
  • 언더바(_)가 들어가도 마찬가지죠...
  • 한글도메인도 같은 신세입니다~

저 문제들은 오늘 퇴근하고 머리를 좀 굴려봐야겠습니다.
정규식만 제대로 이해하면 될텐데 말이죠~

내일 다시 제대로된 코드를 포스팅 하도록 하겠습니다.




posted by 초딩입맛제주아재

댓글을 달아 주세요