[Cookbook] 정규표현식 사용하기





Chapter 2. 정규표현식 사용하기



정규표현식은 주어진 패턴에 일치하는 문자열을 찾기 위해 사용하는 검색 패턴이다.

물론, String 여러 객체 메서드(+ 문법)를 활용하여 검색할 수도 있겠지만 보통(실제 코드 작성 시) 코드 가독성이 현저히 떨어지는 단점이 존재한다.




1. RegExp 리터럴


1.1. String 객체와 마찬가지로 RegExp도 리터럴과 객체 모두를 가지고 있다.


1.2. RegExp 리터럴은 스크립트가 실행될 때 컴파일 된다. 즉, 표현식이 변경되지 않을 것이라면 RegExp 리터럴을 사용하는것이 좀 더 효율적이며, 런타임시 패턴이 변경되거나 생성된다면 객체를 사용한다.(실상 이 부분에 대해, 어느정도 효율을 가질 수 있을지 모르나 크게 염려할 부분은 아니라고 생각한다.)


1.3. 패턴은 슬래시(/) 내부에 배치한다. 또한, 문자열이 아니므로 따옴표(', '')를 사용해 리터럴 값을 Wrapping 하지 않는다.


1.4 . "RegExp 리터널"에서 객체(RegExp) 맴버 접근 시 JS 엔진은 즉시 RegExp 객체를 만들어 해당 RegExp 리터널을 Wrapping 시킨 후 메서드를 호출한다. 또한, 메서드 종료 시 자동 생성된 RegExp 객체를 소멸 시킨다.

 


var rgbHax = /^#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/g.exec('#AD46E0');

window.onload = function () {
    document.body.style.backgroundColor = 'rgb(' + parseInt(rgbHax[1], 16) + ',' + parseInt(rgbHax[2], 16) + ',' + parseInt(rgbHax[3], 16) + ')';
}

 



2. RegExp 객체

 

2.1. RegExp 객체는 자바스크립트 실행 시 컴파일 되지 않으므로 런타임 시 표현식이 변경되거나 만들어진다면 객체를 사용한다.



var rgbHax = new RegExp("^#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$").exec('#AD46E0');


window.onload = function () {
    document.body.style.backgroundColor = 'rgb(' + parseInt(rgbHax[1], 16) + ',' + parseInt(rgbHax[2], 16) + ',' + parseInt(rgbHax[3], 16) + ')';
}




3. 검색하는 문자열이 존재하는지 확인하기

 

RegExp 객체의 test 메서드는 두 개의 인수를 가진다. 첫 번째 인수는 문자열이고, 두 번째는 변경자 이다. 또한, 두 번째 인수는 생략 가능하다.


- 문자열의 매칭 여부(true/false)를 반환한다.

 




4. 대소문자를 구분하지 않고 문자열 검색하기


아래 코드와 같이 정규식 "i" 플래그를 사용하면 대소문자 구분을 무시할 수 있다.


 




5. 패턴과 일치하는 모든 부분 찾기


정규식 "g" 플래그를 사용하면 매칭된 모든 문자열을 찾아낼 수 있다.


즉, 아래 코드와 같이 정규식 "g" 플래그는 매칭된 마지막 위치를 기억하고 있다가 다음 검색 시 그 마지막 위치 다음부터 검색 한다.






6. 캡처 괄호(())를 사용하기


정규식 캡처 괄호(()) 사용 시 문자열 안의 특정 패턴을 찾을 수 있을 뿐만 아니라 이후 찾은 부분의 문자열을 참조할 수 있다.


즉, 아래 코드와 같이 검색된 부분 문자열((t\w*s)\s(t\w*e) === 'tims($1) the($2)')은 왼쪽에서 오른쪽으로 번호(1 ~ 2)가 매겨지며, String 객체의 replace 메서드에서 "$1", "$2"와 같은 형태로 참조할 수 있다.





7. String.match, RegExp.test


8. String.replace


9. Regexp.search


10. Regexp.exec


11. 양끝 공백 제거하기


12. HTML 태그를 명명된 엔티티로 치환하기


13. 원하는 영역의 문자열 가져오기






참고 사이트:

 

http://www.w3schools.com/jsref/jsref_obj_regexp.asp


JavaScript 정규식:

http://b4you.net/blog/68