'Regular Expression'에 해당되는 글 1건

  1. 2011.05.04 Javascript 정규표현식
반응형
I. RegExp 정규표현 객체 생성방법
    1. 리터럴 사용 (앞뒤에 / 를 사용하여 감싼다. ' 나 "는 넣지 않는다.)
        var pattern = /s$/; 

    2. RegExp 객체 생성
        var pattern = new RegExp("s$");

II. 정규 표현식에서 다음의 기호앞에는 \ 를 써야 한다. ( ' " @ # 은 제외한다.)
     문자와 숫자 앞에 나오는 \ 는 대부분 특별한 의미가 있으므로 주의한다.

     ^ & . * + ? = ! : | \ / ( ) [ ] { }

III. 정규 표현식
    1. 문자 클래스

         [...]     : 대괄호 안에 있는 문자
         [^...]   : 대괄호 안에 없는 문자
         .          : 줄바꿈이나 Unicode 줄마침을 제외한 아무 문자
         \w       : ASCII  문자  [a-zA-Z0-9_]와 동일
         \W      : ASCII 분자가 아닌 문자   [^a-zA-Z0-9_]와 동일
         \s        : Unicode 공백 문자
         \S       : Unicode 공백 문자가 아닌 문자
         \d       : ASCII 숫자     [0-9]와 동일
         \D      : ASCII숫자가 아닌 문자      [^0-9]와 동일
         [\b]    : 백스페이스

    2. 반복문자
         ?        : 앞의 항목이 0 또는 한번 나타난다.   {0,1} 과 동일하다.
         +       : 앞의 항목이 한 번 이상 나타난다.  {1, } 과 동일하다.
         *       : 앞의 항목이 0번 이상 나타난다.  {0, } 과 동일하다.

    3. 정규 표현식 참조
        - 정규 표현식 내에서 괄호로 묶인 부분 표현식은 순서대로 \와 숫자를 결합하여 참조한다.
        - 문자 클래스인 [...] 안에는 참조를 사용할 수 없다.

            /['"][^'"]*['"]/            : 작은따옴표나 큰따옴표 내에 한 개 이상의 문자가 있는 경우,
                                               그러나 시작과 끝의 따옴표는 다를 수 있다. (시작은 ' 끝은 " 일 수 있다)
            /(['"])[^'"]*\1/           : 시작과 끝의 따옴표가 같다. 여기서 \1 은 첫번째 () 참조를 나타낸다.

    4. 정규 표현식 앵커 문자
         ^          : 문자열의 시작 부분이나, 여러 라인을 찾는 경우에는 줄의 시작 부분에 매치된다.
         $          : 문자열의 끝 부분이나, 여러 줄을 찾는 경우에는 줄의 끝 부분에 매치된다.
         \b         : 단어 경계에 매치된다.  즉,  단어, 문자열의 시작이나 끝에 매치된다.  [\b] 백스페이스와 다르다.
                       Java 라는 단어만 매치시킬려면 Java 라는 단어가 문장 처음 혹은 끝에, 중간에 올 수 있다.
                       예) /\bJava\b/
         \B         : 단어 경계가 아닌 곳에 매치된다.
                        JavaScript 나 postscript에 매치되지만 script나 Scripting에 매치되지 않는다.
                        예) /\B[Ss]cript/
         (?=p)    : 이후에 나올 문자들이 패턴 p에 매치된다.
                        JavaScript: The Definitive Guide 는 매치되지만 Java in a Nutshell 은 : 이 없으므로 매치되지 않음
                        예) /[Jj]ava([Ss]cript)?(?=\:)/
         (?!p)     : 이후에 나올 문자들이 패턴 p에 매치되어서는 안된다.

    5. 정표 표현식 플래그(flag)
        - flag는 / 문자 바깥에 기술된다.
         i            : 패턴 매칭이 대소문자 구별없이 이루어져야 한다.
         g           : 패턴 매칭이 전역적이어야 한다. 즉, 탐색된 문자열에서 매치된 부분을 모두 얻어야 한다.
                        java 라는 단어(Java 혹은 JAVA 등)를 대소문자 구별없이 모두 찾는다.
                        예) /\bjava\b/gi
         m          : 여러 줄 상태, \b 는 문장의 처음과 끝, 중간 단어만 매칭하지만 ^는 줄의 시작이나 문자열의 시작에 매치,
                        $는 줄의 끝이나 문자열의 끝에 매치된다.
                        Java\nis fun (\n은 줄바뀜)
                        예) /Java$/im 

IV. RegExp 객체 사용법
    1. exec() 메소드
        - 문자열을 전달인자로 받아 정규 표현식을 실행한다. 매치되는 부분을 찾지 못하면 null을 리턴한다.
           매치되면 배열 객체가 리턴되며 배열의 0번 원소에는 정규표현식 매치된 문자열이 들어있다.
           배열객체의 index 프라퍼티는 매치가 일어난 문자의 위치가 저장되고 input프로퍼티는 검색대상이었던
           문자열을 참조한다.
        -  g플래그를 가진 정규 표현식이라면 RegExp객체의 lastIndex프라퍼티는 현재 매치된 부분 문자열의
           바로 다음위치이다. 매치되는 부분이 없으면 lastIndex 는 0 로 설정된다.
           그 다음은 lastIndex 부터 다시 매치되는지를 찾는다.
           
           var pattern = /Java/g;
           var text = "JavaScript is more fun than Java!";
           var result;
           while ((result = pattern.exec(text)) != null) {
               alert("Matched ' " + result[0] + "' at position " + result.index + "; next search begins at " + pattern.lastIndex);
           }



 
반응형
Posted by seungkyua@gmail.com
,