발생일: 2013.04.29 문제: 지난 주 스터디 주제는 정규식이었다. 이미 정규식은 모두 익숙하고,챕터의 내용 자체가 짧기도 해서 금방 끝내고 커피 마시러 갔더랬다.ㅎㅎ 스터디 때 몇 가지 알려드리려고 메모해둔 게 있어 옮겨둔다.나름대로 특징적인 내용을 뽑아 정리했던 건데, 다시 읽어보니 딱히 그렇지도 않더라.그냥 복습 삼아 한 번 주-욱 읽어보면 좋다. ^^ 해결책: ES5에서 리터럴 정의는 항상 새로운 객체를 리턴한다. var pat = /abc/; ES5에서는 이 구문이 실행될 때마다 새 RegExp 객체를 생성한다. lastIndex 속성이 잘못 사용될 것을 우려한 의도적인 설계이다. /a/ === /a/; //--> false 구형 IE에서는 항상 같은 객체를 리턴한다. 유니코드 문자열 사용..
발생일: 2013.02.18 문제: 우리 부부는 주말마다 커피숍에 가서 책을 읽는데,어제는 날이 좋아서 남양주에 있는 고당이라는 카페로 나들이를 갔다. 작년에 한 번 다녀왔던 곳인데, 한옥 카페이고 분위기도 괜찮다.좀 비싼 데다 오래 기다려야 하는 게 흠이긴 한데, 딱 드라이브하기 좋을 만큼의 거리라 즐겁게 다녀왔다. 그치만, 거리도 있고 해서 오래 앉아있을 것도 아니어서, 가볍게 후딱 읽을 셈으로 책장에서 가장 얇은 '손에 잡히는 정규 표현식'을 뽑아 들고 갔다. 정규식은 나름 잘 알고 있다고 생각해서 그닥 읽을 계획이 없던 책이었는데,읽어보니 어려운 개념도 아주 쉽게 잘 설명해놓아서 많이 배울 수 있었다. 예전에 먼저 읽었던 아내가,단어의 경계를 나타내는 \b 메타 문자의 예제 부분에 물음표를 쳐둬서..
발생일: 2011.01.03 문제: 마크업의 클래스 값을 구분해 탭의 인덱스를 가져오는 스크립트를 작성했다. 탭의 클래스 이름은 각각 "tab", "tab2", "tab3" 와 같은 식으로 구성되어 있으며 아래와 같이 가져와서 사용했다. function getTabIndex(className) { var reg = /tab(\d)?/; var index = reg.exec(className)[1]; return index - 1 || 0; // 값이 없을 경우, index - 1 이 NaN 을 기대함. } 헌데, 클래스명이 "tab" 일 경우, FF 에서는 기대했던 대로 결과값이 0이 리턴되었지만, IE 에서는 -1 이 리턴된다. 해결책: 정규식에서 그룹에 대한 정규식 매칭 결과가 없을 때 브라우저 별 ..
발생일: 2009.11.20 문제: 파트에서 한 주에 한 번씩 연구회를 하는데, 이 번엔 내 차례다... 썸바디의 요청에 의해 정규식을 주제로 했다. 아래는 몇 군데 유용한 사이트 링크. 참고하면 좋겠다. 해결책: 정규식이란? Regular Expression (Wikipedia) 자바스크립트 정규식 사용 https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Regular_Expressions Replace 메서드에서 정규식 사용 https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace 자바 정규식 객체 사용 http://java.sun.com/..
발생일: 2009.06.12 문제: 키워드를 입력하면 한글/영문 여부를 구분해서 각각 다른 액션을 수행하려고 한다. 한글과 영문이 섞여있을 경우엔 한글로 파악하며, 샘플 데이터는 아래와 같다. 'abc' : 영문 'abc 울랄라' : 한글 ' abc _ def -- abc' : 영문 '울라라' : 한글 '울랄라A' : 한글 키워드에 특수문자가 포함될 수 있지만 구분 없이 단지 한글과 영문 여부를 판단하려고 한다. 하여~ 좀 간단히 깔끔하게 해결하고자, apache의 StringUtils의 isAlphanumericSpace() 메서드를 사용해보려고 했으나~ 여기서의 알파벳은 한글도 포함하는 모양이다. 아마 내부적으론 \w 와 \s 를 정규식으로 체크하는 모양이다. for 문으로 캐릭터 체킹을 하는 예제도..
발생일: 2008.09.03 문제: 자바에서 dot(.)을 replace 하려고 하니 원하는 대로 되지 않는다. 해결책: dot(.)은 정규식에서 개행식을 제외한 아무 문자를 얘기한다. str.replaceAll(".", ""); 을 사용했을 경우, "." 이 정규식으로 적용되어 모든 문자를 ""으로 만들어버린다. dot을 dot 그대로 인식시키기 위해서는 \. 로 해줘야 한다. \ 또한 예약어이기 때문에 \\ 로 표시해줘야 한다. 고로, str.replaceAll("\\.", ""); 와 같이 해줘야 한다.