정규 표현식
Last updated
Was this helpful?
Last updated
Was this helpful?
자바스크립트의 많은 부분은 다른 언어들에서 차용한 것
구문은 Java, 함수는 Scheme, 프로토타입에 의한 상속은 Self, 정규 표현식은 Perl에서 비롯
다음은 URL에 일치하는 정규 표현식 예제
```javascript var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.-A-Za-z]+)(?::(\d+))?(?:\/())?(?:\?())?(?:#(.*))?$/;
var url = "";
var result = parse_url.exec(url);
var names = ['url', 'scheme', 'slash', 'host', 'port', 'path', 'query', 'hash'];
var blanks = ' '; var i;
for (i=0; i<names.length; i++) { document.writeln(names[i] + ':' + blanks.substring(names[i].length), result[i]); }
이 부분은 프로토콜 이름 (http, ftp)에 일치하는 부분 단, 프로토콜 이름 다음에 :이 올 때만 적용됨 끝에 붙은 ?는 이 그룹이 옵션이라는 뜻 접미사 +는 문자 클래스가 한 번 이상 일치한다는 것을 나타냄
이 부분은 두 번째 캡쳐 그룹으로서 \/는 /(슬래시)와 일치해야 한다는 것을 의미 /(슬래시)는 정규 표현식 리터럴의 끝으로 잘못 해석되지 않게 (백슬래시)로 이스케이프됨 {0, 3}은 /(슬래시)가 0에서 3번 일치 중에 하나라는 뜻
이 부분은 세 번째 캡쳐 그룹으로서 호스트 이름과 일치하는 부분인데 하나 이상의 숫자나 문자 그리고 .(마침표)나 -로 구성됨 A 앞에 - 문자는 범위를 나타내는 하이픈과 혼동을 막기 위해 이스케이프됨
이 부분은 옵션으로 올 수 있는 포트 번호 \d는 숫자 문자를 나타냄
이 캡쳐 그룹은 /로 시작하고 문자 클래스 는 ^로 시작하는데 이것은 ?와 #을 제외한 모든 문자를 나타냄 *는 0번 이상 일치한다는 것을 의미
이 부분은 #이 아닌 문자가 0번 이상 나오는 캡쳐 그룹을 의미
이제 #으로 시작하는 마지막 옵션 그룹 .(마침표)는 라인 종료 문자를 제외한 어떤 문자하고도 일치된다는 것을 의미
$는 문자열의 끝을 의미함 $를 마지막에 붙임으로써 URL의 마지막 다음에 어떠한 여분의 문자도 없다는 것을 나타내게 됨
정리
매우 복잡하거나 뒤엉킨 정규 표현식은 이식성 문제가 발생할 확률이 높다
중첩된 정규 표현식은 일부 환경에서 치명적인 성능 저하 문제를 야기함
결국 단순함이 최상의 전략임