출처: http://blog.naver.com/nondureng1?Redirect=Log&logNo=10045714869


정규 표현식: 문자들의 패턴을 기술하는 객체


정규표현식 리터럴은 문자들을 한쌍의 슬래시(/) 안에 작성

ex) var pattern =/s$/;


정규표현식 리터럴 문자

\0        널문자

\t         탬문자

\n        줄바꿈

\v        수직탭

\f         폼피드

\r         캐리지리턴


역슬래시 사용

\ 사용 ==> /\\/


정표 표현식 문자 클래스

[...]      대괄호 안에 있는 문자

[^...]    대괄호 안에 없는 문자

.           줄바꿈이나 unicode 줄마침 문자를 제외한 아무 문자

\w       ASCII 문자([a-zA-Z0-9_] 와 동일

\W       ASCII 문자 아닌 문자[^a-Z0-9_] 와 동일

\s        unicode 공백문자

\S        unicode 공백 문자가 아닌 문자(\w 와 \S 다름)

\d        ASCII 숫자([0-9]와 동일)

\D        ASCII 숫자가 아닌 문자 [^0-9] 와 동일

[\b]      백스페이스



정규 표현식 반복 문자

{n,m}      앞의 항목이 적어도 n번 이상 나타나고 m번보다는 적게 나타 난다

{n,}        앞의 항목이 n번 이상 나타난다.

{n}         앞의 항목이 정확히 n번 나타 난다.

?            앞의 항목이 0 또는 한번 나타 난다. 즉 앞의 항목이 생략할수 있음 {0,1} 동일

+            앞의 항목이 한번 이상 나타남 {1,}  동일

*            앞의 항목이 0번 이상 나타남 {0,} 동일



ex) /\d{2,4}/          ==>   2에서 4자리 사이의 숫자와 매치

    /\w{3}\d?/       ==>   정확히 세 문자와 매치되고, 생략 가능한 숫자가 하나 있음

  /\s+java\s+/       ==>   앞뒤에 하나 이상의 공백이 있는  java 와 매치

  /[^"]*/                 ==>   0개 이상의 따옴표가  아닌 문자와 매치


반복 규제

? 사용

ex) /a+?/   이 정규식은 "aaa" 에 적용 되면 첫 번째 a에만 매치



대체와 그룹화, 참조

|              대체,왼쪽이나 오른쪽의 부분 표현식을 매치

(...)          그룸화,운소들을 *,+,?,| 등과 함께 사용할 수 있게 단일 원소로 그룹화

(?...)         단지 그룹화만을 위한 것, 원소들을 단일 원소로 그룹화하지만 이 그룹에 매치되는 문자들을 기억할 필요 없음

\n           그룹 번호 n이 처음 매치되었을 때의 문자를 사용하여 매치시킨다. 그룹은(중첩될 수도 있는) 괄호로 묶인 부분 표현식

                그룹 번호는 왼쪽 괄호를 왼쪽에서 오른쪽으로 세어서 정한다.'.+' 로 만들어진 그룹은 번호를 지정 하지 않음


ex) /\d{3}|[a-z]{4}/     세 자리 숫자나 네 개의 소문자 매치

    ==> 대체 표현식은 매치 되는 것을 찾을 때까지 왼쪽에서 오른쪽으로 검사

          왼쪽에 있는 대체 표현식이 매치되면 오른족에 있는 표현식이 더 잘 매치되더라도 무시 됨


    /java(script)?/  생략 가능한 문자열인 script 가 뒤 따라 오는  "java" 매치

    /(ab|cd)+|ef)/ 문자열 "ef"에 매치 되거나 문자열 "ab" 혹은 "cd"가 한번 이상 반복


정규 표현식 맹커 문자

^             문자열의 시작 부분이나, 여러 라인을 찾는 경우에는 줄의 시작 부분 매치

$            문자열의 끝 부분이나, 여러 줄을 찾는 경우에는 줄의 끝 부분에 매치

\b         단어 경계에 매치된다. 즉\w와 \W문자나 \w 문자열의 시작이나 끝부분의 위치와 매치

             ([\b]는 백스페이스와 매치)

\B         단어 경계가 아닌 곳에 매치

(?=p)       긍정적 뒤보기 시ㅓㄴ언, 이후에 나올 문자드이 패턴 p에매치되어야 하지만 매치 결과에는 나타 나지 않음

(?!p)        부정적 뒤보기 선언, 이후에 나올 문자들이 패턴 p에 매치되어서는 안됨


ex) /^JavaScript$/  ==> "JavaScript" 라는 단어 자체가 한 줄인 것

    /\B[Ss]cript/   ==>"JavaScript", "postscript" 에 매치 "script" "Scripting" 매치 안됨

    /[Jj]ava([Ss]cript)?(?=\:)/ "JavaScript: The Definitive' 매치

   /Java(?!Script0([A-Z])\w*)/ Java 뒤에 "Script" 가 없는 한 뒤에 대문자와 임의의 수의 ASCII 문자 매치

                                              JavaBeans 매치


정규 표현식 플래그

 

 i           대소문자를 구별하지 않는 매칭

 g          전역 매칭을 수행 즉 첫 번재 매치에서 끝내지 않고 매치되는 모든 것을 찾음

 m          여러 줄 상태 ,^는 줄의 시작이나 문자열의 시작에 매치되고, $는 줄의 끝이나 문자열의 끝에 매치됨



ex) /\bjava\b/gi 대소문자를 구별하지 안고 이단어의 모든 출현 찾기





"JavaScript".search(/script/i); ==>가장 처음 매칭 되는 부분 문자열의 위치  매칭 되는 부분 문자열이 없다면 -1



var url= /(\w+):\/\/([\w.]+)\/(\S*)/;
var text="Visit my blog at http://www.example.com/~david";
var result=text.match(url);

if(result != null){

 var fullurl =result[0]; // http://www.example.com/~david
 var protocol=result[1]; //http
 var host=result[2]; //www.example.com/~david
 var path=result[3]; //~david

}


var text3="1, 2, 3, 4, 5".split(/\s*,\s*/); ==> ["1","2,","3","4","5"]

 

 

 

/match() 메서드와 다르게 exec() 메서드는 정규 표현식에 전역 g 플래그의 존재 여부 상관없이 같은 종류의 배열

반환

 

var patternex =/Java/g;

var textex="JavaScript is more fun than Java!";
var resultex;

while((resultex = patternex.exec(textex)) != null){
alert("Matched ' " + resultex[0] + " ' " +
      " at position " + resultex.index +    // 매치가 일어난 문자의 위치
      "; next search bgein at " +patternex.lastIndex); // 다로 다음 나오는 문자의 위치
}

  



AND