본문 바로가기

프로그램/javascript

javascript match()와 exec 를 이용한 정규식 활용

반응형


보통은 replace 에 사용함

var str = "2010-09-09솰라"; 
str.replace(/[0-9]{4}[-][0-9]{2}[-][0-9]{2}/, '') ;

이런식으로 해서 대체하였었음.

match 와 exec를 사용해봣음.

var res = str.match( /[0-9]{4}[-][0-9]{2}[-][0-9]{2}/ );

결과값은 Array 에 담아서 보내고
일치하는 값이 없을 경우 Null 객체  반환

여기서 내가 헷갈린건
/([0-9]{4}[-][0-9]{2}[-][0-9]{2})/ 식으로 ()로 그릅핑을 했다.

이랬더니 결과과 2개-_-;; 찍어보면 2010-09-09, 2010-09-09 로 들어가 있음.
왜 그런가 겁나 고민한 결과 () 는 자동 capture 가 된다는거 같음.

일예를 들면
http://www.java2go.net/java/java_regex.html#GroupsCapturing
 

(a)(b) 의 결과는 (a)(b), (a), (b) 로 값이 떨어지게 되어 있음 

그래서 해결 방법은 non-capture 인 () 안에 (?:regexp string) 로 작성하거나
끝에 전역 검색을 하는 g(//g) 를 붙여주면 해결되었음.

?: 나 capture 된 결과 일 경우 최초 검색된 값만 가지고 잇는문제점이 있으므로
결국은 //g 로 해결해야 할 것 같음

exec도 비슷함

var testObj = /([0-9]{4})/; or var testObj=new RegExp( // ) ;
var result = testObj.exec();

결과는 match 를 할 경우와 같았음.

결국 capture 개념 몰라서 생긴 병신같은 삽질임..


CAPTURE 개념을 아직도 정확히 모르겠음.

http://blog.naver.com/PostView.nhn?blogId=yonga&logNo=150004198246

를 참고하여 WINDOW(95|98|2000) 을 가지고 테스트 하면


WINDOW(?:95|98|2000) 

- 단순히 CAPTURE 만 안함

WINDOW(?=95|98|2000) 

- 그룹핑값이 일치할 경우 선검색임

- 그룹핑 일치하는 것의 앞부분을 검색한다고 보면 됨

- WINDOW95 일 경우 WINDOW 가 선택됨

- WINDOW3.1 일 경우 WINDOW 선택 안됨

- 1. () 검색, 2. WINDOW 찾고, 3. 뒤에 문자 검색

WINDOW(?=95|98|2000)XX  

- WINDOW95XX 가 매핑되지 않음


결국 ?= 나 ?! 사용 시 해당 패턴은 시작점만 체크 한다고 보면 되고 그 이후에는 정규식 역활을 안하는 것 같음

WINDOW(?=95|98|2000)\W

- WINDOW95의 WINDOW9, WINDOW98 의 WINDOW9, WINDOW2000 의 WINDOW2 가 선택됨


어렵네.


결국 하려는 것은

VARCHAR(20)

CHAR(10)

INTEGER

DATE

CHAR(3)


에서 (숫자) 이오에는 삭제를 하려고 했는데

이를 (숫자) 로 접근해서 그 외에 삭제로 처리하려고 하니 잘 안되었음


처리는

\w+(?=\(\d+\)) 로 처리하였음




* 테스트 URL

http://regexpal.com/

* 참고 url
http://blog.naver.com/PostView.nhn?blogId=yonga&logNo=150004198246
http://codepedia.tistory.com/entry/JsRegularExpressions
http://ohgyun.com/232
http://wintab.blogspot.com/2009/05/%EC%A0%95%EA%B7%9C%EC%8B%9D-%ED%8E%B8%EC%A7%91%EA%B8%B0%EC%A0%95%EA%B7%9C%EC%8B%9D-%ED%85%8C%EC%8A%A4%ED%8A%B8.html
http://www.gskinner.com/RegExr/

http://neokido.tistory.com/search/%EC%A0%95%EA%B7%9C%EC%8B%9D

http://openwiki.kr/tech/regex

http://time2relax.net/wp/?p=36

http://icoon22.tistory.com/220