개발 Q&A

제목 자바스크립트 정규식 질문
글쓴이 토끼와거북 작성시각 2014/04/07 05:03:23
댓글 : 9 추천 : 0 스크랩 : 0 조회수 : 12470   RSS
문자열에서 (가) 에서 (차) 까지 해당하는 문자열이 있을 경우 위치를 반환받고자 합니다. 아래 부분에서 '(' 과 ')'는 어떻게 추가해야 할까요?
text = "(가) 남자의 의복에서 가장 사치스러운 호사가 마고자다. 바지, 저고리, 두루마기 같은 다른 옷보다 더 값진 천을 사용한다. 또 남자 옷에 패물이라면 마고자의 단추다.(나) 나는 마고자를 입을 때마다 한국 여성의 바느질 솜씨를 칭찬한다.(다) 문화의 모든 면이 다 이렇다. 전통적인 안목과 전통적인 솜씨가 있으면 남의 문화가 아무리 거세게 밀려든다 할지라도 이를 고쳐서 새로운 제 문화를 이룩하는 것이다.(라) 마고자는 원래 중국의 마괘자에서 왔다 한다. 이것이 우리나라에 들어와서 마고자가 됐다는 것이다. 그러나 마고자는 마괘자와 비슷도 아니 한 딴 물건이다. 한복에는 안성맞춤으로 어울리는 옷이지만, 중국옷에는 입을 수 없는, 우리의 독특한 옷이다.";
var len = text.length;
for(var i=0; i < len; i++){ 
 if(text.charAt(i).match(/[가-차]/)){
  return i;
 }
}
 다음글 검색 게시판을 작성시.. 문제가 생겼습니다... (4)
 이전글 $DOCUMENT_ROOT 로 절대 경로 인식 못할 때... (5)

댓글

letsgolee / 2014/04/07 08:27:19 / 추천 0
 역슬래쉬를 이용하여 이스케이프하면 됩니다.
[code]
.match(/\([가-차]\))
[/code]
토끼와거북 / 2014/04/07 09:54:11 / 추천 0
 역슬래쉬를 이용해 보았는데 먹지 않네요.
한대승(불의회상) / 2014/04/07 10:29:13 / 추천 0
토끼와거북// 다시 한 번 확인해 보세요.

\([가-차]\)

토끼와거북 / 2014/04/07 11:31:44 / 추천 0
 아래와 같이 하니까 안 되네요.
<script>
$(function(){
 str_test();
});

function str_test(){
 text = "(가) 고구려 (나) 백제 (다) 신라 (라) 조선";
 var len = text.length;
 
 for(var i=0; i < len; i++){ 
  if(text.charAt(i).match(/\([가-차]\)/)){
   alert(i);
  }
 }
}
</script>
한대승(불의회상) / 2014/04/07 11:57:21 / 추천 0
토끼와거북// 글자를 한자씩 나누면 당연히 안되겠죠.
letsgolee / 2014/04/07 12:27:20 / 추천 0
 [code]
var text = "(가) 남자의 의복에서 가장 사치스러운 호사가 마고자다. 바지, 저고리, 두루마기 같은 다른 옷보다 더 값진 천을 사용한다. 또 남자 옷에 패물이라면 마고자의 단추다.(나) 나는 마고자를 입을 때마다 한국 여성의 바느질 솜씨를 칭찬한다.(다) 문화의 모든 면이 다 이렇다. 전통적인 안목과 전통적인 솜씨가 있으면 남의 문화가 아무리 거세게 밀려든다 할지라도 이를 고쳐서 새로운 제 문화를 이룩하는 것이다.(라) 마고자는 원래 중국의 마괘자에서 왔다 한다. 이것이 우리나라에 들어와서 마고자가 됐다는 것이다. 그러나 마고자는 마괘자와 비슷도 아니 한 딴 물건이다. 한복에는 안성맞춤으로 어울리는 옷이지만, 중국옷에는 입을 수 없는, 우리의 독특한 옷이다.";
 
var len = text.length;
 
for(var i = 0; i < len; i++) {
    var c = text.charAt(i);
 
    if (c == '(')
    {
        var s = text.substr(i, 3);
        var r = /^\([가-차]\)$/;
 
        if (s.match(r))
        {
            alert(i);
            i = i+3;
        }
    }
}
[/code]

한대승님이 언급한 것처럼 charAt은 한 캐릭터만 가져옵니다. 그걸 match할 수는 없지요.
토끼와거북 / 2014/04/07 12:58:11 / 추천 0
letsgolee 님 정상 작동합니다. 감사드립니다.^^
도라에몽 / 2014/04/07 13:04:05 / 추천 0
꼭 위치를 반환 받아야 하는것이 아니라면.. 아래처럼 하는건 어떨까요?. ^^; 
var text = "(가) 고구려 (나) 백제 (다) 신라 (라) 조선";

$(function(){
 var str_arr = str_test();
 console.log(str_arr);
});

function str_test(){
 var pattern = /\([가-차]\)/;
 var arr = text.split(pattern);
 return arr;
}
토끼와거북 / 2014/04/07 20:45:50 / 추천 0
브라이언님이 알려 준 방식이 더 간편하네요. 원래 목적은 패턴값으로 문자열을 잘라내는 것이었거든요. 
알려주셔서 감사드립니다.^^