보통은 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://time2relax.net/wp/?p=36
http://icoon22.tistory.com/220