16
Javascript The Good Parts Chapter 7. Regular Expression 13428일요일

[octoberskyjs] Regular Expression

Embed Size (px)

Citation preview

Page 1: [octoberskyjs] Regular Expression

Javascript The Good Parts

Chapter 7. Regular Expression

13년 4월 28일 일요일

Page 2: [octoberskyjs] Regular Expression

What is RegExp? 문자열에서����������� ������������������  특정����������� ������������������  내용을����������� ������������������  검색����������� ������������������  /����������� ������������������  대체����������� ������������������  /����������� ������������������  발췌하기����������� ������������������  위해����������� ������������������  사용.����������� ������������������  

Javascript에서����������� ������������������  사용하는����������� ������������������  메소드

regexp.exec

regexp.test

string.match

string.repace

string.search

string.split

13년 4월 28일 일요일

Page 3: [octoberskyjs] Regular Expression

Javascript에서의 Regular Expression정규표현식은 정규 언어에 대한 수학적 연구에서 비롯됨. 

Ken Thompson은 Stephen Kleene 의 이론을 type-3 언어에 적용하여 텍스트 에디터/프로그래밍 언어에서 특정 패턴을 찾을 수 있게 실질적인 패턴 매칭 기능을 추가. 

정규표현식의 약간의 재해석 + Perl 의 확장 구문을 따름.

13년 4월 28일 일요일

Page 4: [octoberskyjs] Regular Expression

Example : URI Match

var parse_url = /^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/;

var url = "http://www.ora.com:80/goodparts?q#fragment

     

13년 4월 28일 일요일

Page 5: [octoberskyjs] Regular Expression

Result : URI Match

13년 4월 28일 일요일

Page 6: [octoberskyjs] Regular Expression

URI match library...

https://code.google.com/p/jsuri/����������� ������������������  

14가지로����������� ������������������  쪼개놓음.����������� ������������������  

strick����������� ������������������  mode����������� ������������������  /����������� ������������������  loose����������� ������������������  mode����������� ������������������  구별.����������� ������������������  

필자의����������� ������������������  의견

정규 표현식은 더 복잡하게 만들수도 있지만, 길이가 짧고 간단한게 최고!

13년 4월 28일 일요일

Page 7: [octoberskyjs] Regular Expression

var parse_number = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;

var test = function(num) {

     document.writeln(parse_number.test(num));

};

test('1');test('number');test('98.6');test('132.21.86.100');test('123.45E-67');          //test('123.45D-67');

숫자 일치

13년 4월 28일 일요일

Page 8: [octoberskyjs] Regular Expression

Regular Expression 객체 생성

생성 방법

정규 표현식 리터럴 사용

var my_regexp = /"(?:\\.|[^\\\"])*"/g;

RegExp 객체로 생성 var my_regexp = new RegExp("\"(?:\\.|[^\\\\\\\"])*\"", 'g');

13년 4월 28일 일요일

Page 9: [octoberskyjs] Regular Expression

Regular Expression플래그

리터럴 플래그 설명 g Global

i Insensitive

m Multiline

RegExp 객체 속성 객세

설명global g flag 사용된 경우 true

ignoreCase i flag 사용된 경우 true

lastIndex 다음 exec 실행을 위한 시작 지점. 초기값 0.

multiline m 플래그가 사용된 경우 true

source 정규 표현식의 소스 텍스트

13년 4월 28일 일요일

Page 10: [octoberskyjs] Regular Expression

RegExp 객체 function make_a_matcher() {

     return /a/gi; }

var x = make_a_matcher();var y = make_a_matcher();

// x와 y는 같은 객체 

x.lastIndex = 10; document.writeln(y.lastIndex);           // 10

==>> 0이 나온다. 확인 필요. 스펙 바뀌었나?

13년 4월 28일 일요일

Page 11: [octoberskyjs] Regular Expression

Regular Expression구성요소

정규 표현식

하나의 정규 표현식 시퀀스 포함

정규 표현식 시퀀스

하나의 정규 표현식 요소를 포함

정규 표현식 요소

문자

괄호로 묶인 그룹

문자 클래스

이스케이스 시퀀스

13년 4월 28일 일요일

Page 12: [octoberskyjs] Regular Expression

Escape?����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \ -> 정규 표현식 요소/문자열에서 모두 이스케이프 되었다는 표시.

����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \f����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  -����������� ������������������  form����������� ������������������  feed����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \n����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  -����������� ������������������  line����������� ������������������  feed����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \r����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  -����������� ������������������  carriage����������� ������������������  return����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \t����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  -����������� ������������������  tab����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \u����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  -����������� ������������������  16진수����������� ������������������  유니코드����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \b����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  -����������� ������������������  역스페이스����������� ������������������  문자����������� ������������������  아님!����������� ������������������  문자의����������� ������������������  앞/뒤����������� ������������������  경계를����������� ������������������  표시하는����������� ������������������  메타데이터.����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \d����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  [0-9]와����������� ������������������  동일.����������� ������������������  아라비아����������� ������������������  숫자����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \D����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  [^0-9]����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \s����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  공백����������� ������������������  문자����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \S����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ^공백����������� ������������������  문자����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \w����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  [0-9A-Za-z]����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \W����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  [^0-9A-Za-z]

����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \1����������� ������������������  첫����������� ������������������  번째����������� ������������������  그룹에����������� ������������������  캡쳐된����������� ������������������  텍스트에����������� ������������������  대한����������� ������������������  참조����������� ������������������  정보.����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  -����������� ������������������  중복된����������� ������������������  단어를����������� ������������������  찾고자����������� ������������������  하는����������� ������������������  경우����������� ������������������  유용함.����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  var����������� ������������������  double_words����������� ������������������  =����������� ������������������  /([A-Za-z\u00C0-\u1FFF\u2800-\uFFFD\-]+)\s+\1/gi;����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \2����������� ������������������  두����������� ������������������  번째����������� ������������������  그룹에����������� ������������������  대한����������� ������������������  참조����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  \3����������� ������������������  세����������� ������������������  번째����������� ������������������  그룹에����������� ������������������  대한����������� ������������������  참조

13년 4월 28일 일요일

Page 13: [octoberskyjs] Regular Expression

Group

캡쳐 ()

비캡쳐 (?: )

긍정적 룩어헤드 (?= )

부정적 룩어헤드 (?! )

13년 4월 28일 일요일

Page 14: [octoberskyjs] Regular Expression

Class특정 문자 집합을 지정

ex. 모음

(?:a|e|i|o|u) or [aeiou]

장점

1. 문자의 범위 지정 가능

ASCII 특수문자 [!-\/:-@\[-`{-]

2. 부정형 클래스

ASCII 특수문자에 해당하지 않는 문자 [^!-\/:-@\[-`{-]

13년 4월 28일 일요일

Page 15: [octoberskyjs] Regular Expression

Qualifier

요소가 몇 번 일치해야 하는가?

/www/ = /w{3}/

{3,6}

{3,}

?

*

+

13년 4월 28일 일요일

Page 16: [octoberskyjs] Regular Expression

The End

13년 4월 28일 일요일