📗
TIL
  • About
  • javascript
    • GoodParts
      • 프로토타입 방식
      • RegexComponent
      • 재귀적 호출 (Recursive Call)
      • 객체를 기술하는 객체
      • 예외 (Exception)
      • 호출
      • 문자열 (Strings)
      • 참조 (Reference)
      • 배열의 특성들
      • 숫자 (Numbers)
      • 메모이제이션 (Memoization)
      • 모듈 (Module)
      • 열거 (Enumeration)
      • 정규 표현식
      • 정규 표현식 객체 생성
      • 프로토타입 (Prototype)
      • 콜백 (Callback)
      • 문장 (Statements)
      • 함수 표현식 요약
      • 의사 클래스 방식 (Pseudoclassical)
      • 함수를 사용한 방식
      • 클로저 (Closer)
      • 배열 (Array)
      • 기본 타입에 기능 추가
      • 자바스크립트 분석
      • 인수 배열(arguments)
      • Function
      • 유효범위(Scope)
    • YouDon'tKnowJS
      • 타입
      • Native
      • 명시적 강제변환
      • 문자열
      • 함수 vs 블록 스코프
      • 클로저
      • 배열
      • 숫자
      • 연산자 우선순위
      • 스코프
      • 암시적 강제변환
      • 래퍼
      • Statement
      • 호이스팅
      • Coercion
    • javascript
Powered by GitBook
On this page

Was this helpful?

  1. javascript
  2. GoodParts

정규 표현식

Previous열거 (Enumeration)Next정규 표현식 객체 생성

Last updated 4 years ago

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]); }

> ^ 문자는 문자열의 시작을 나타냄

```regexp
(?:([A-Za-z]+):)?

이 부분은 프로토콜 이름 (http, ftp)에 일치하는 부분 단, 프로토콜 이름 다음에 :이 올 때만 적용됨 끝에 붙은 ?는 이 그룹이 옵션이라는 뜻 접미사 +는 문자 클래스가 한 번 이상 일치한다는 것을 나타냄

(\/{0, 3})

이 부분은 두 번째 캡쳐 그룹으로서 \/는 /(슬래시)와 일치해야 한다는 것을 의미 /(슬래시)는 정규 표현식 리터럴의 끝으로 잘못 해석되지 않게 (백슬래시)로 이스케이프됨 {0, 3}은 /(슬래시)가 0에서 3번 일치 중에 하나라는 뜻

([0, 9.\-A-Za-z]+)

이 부분은 세 번째 캡쳐 그룹으로서 호스트 이름과 일치하는 부분인데 하나 이상의 숫자나 문자 그리고 .(마침표)나 -로 구성됨 A 앞에 - 문자는 범위를 나타내는 하이픈과 혼동을 막기 위해 이스케이프됨

(?::(\d+))?

이 부분은 옵션으로 올 수 있는 포트 번호 \d는 숫자 문자를 나타냄

(?:\/([^?#]*))?

이 캡쳐 그룹은 /로 시작하고 문자 클래스 는 ^로 시작하는데 이것은 ?와 #을 제외한 모든 문자를 나타냄 *는 0번 이상 일치한다는 것을 의미

(?:\?([^#]*))?

이 부분은 #이 아닌 문자가 0번 이상 나오는 캡쳐 그룹을 의미

(?:#(.*))?

이제 #으로 시작하는 마지막 옵션 그룹 .(마침표)는 라인 종료 문자를 제외한 어떤 문자하고도 일치된다는 것을 의미

$

$는 문자열의 끝을 의미함 $를 마지막에 붙임으로써 URL의 마지막 다음에 어떠한 여분의 문자도 없다는 것을 나타내게 됨

정리

  • 매우 복잡하거나 뒤엉킨 정규 표현식은 이식성 문제가 발생할 확률이 높다

  • 중첩된 정규 표현식은 일부 환경에서 치명적인 성능 저하 문제를 야기함

  • 결국 단순함이 최상의 전략임

http://www.ora.com:80/goodparts?q#fragment