로그인

이메일
비밀번호
왼쪽에 걸리적 거리는 거 숨기기
자꾸 까먹어서 씀.

<tag> 와 </tag> 사이에 있는 문자열을 얻고 싶을때 아래와 같은 정규식을 쓸 수 있다.

(Language : javascript)
  1. var str = "<tag>hello</tag>";
  2. console.log(/<tag>.*<\/tag>/.test(str) && RegExp.$1);

위의 코드를 실행하면 원하는 대로 hello 가 출력되지만,
str 의 내용이 아래처럼 바뀌면 문제가 된다.

(Language : javascript)
  1. var str = "<tag>hello</tag><tag>world</tag>";
  2. console.log(/<tag>.*<\/tag>/.test(str) && RegExp.$1);
  3. // hello</tag><tag>world 라고 출력됨

이를 방지하기 위해 .* 를 [^<]* 로 바꾸면 해결되는 것처럼 보이지만,

(Language : javascript)
  1. var str = "<tag>hello</tag><tag>world</tag>";
  2. console.log(/<tag>[^<]*<\/tag>/.test(str) && RegExp.$1);
  3. // hello 라고 출력됨

str 이 아래처럼 바뀌면 다른 문제가 발생한다.

(Language : javascript)
  1. var str = "<tag>hel<foo>lo</tag>";
  2. console.log(/<tag>[^<]*<\/tag>/.test(str) && RegExp.$1);
  3. // 매칭되지 못함

해결 방법은 '0개 이상의 글자' 를 나타내는 * 의 범위가 최소 범위를 갖게 하는 것.
아주 간단해서 * 뒤에 ? 만 붙히면 된다.

(Language : javascript)
  1. var str = "<tag>hel<foo>lo</tag><tag>world</tag>";
  2. console.log(/<tag>.*?<\/tag>/.test(str) && RegExp.$1);
  3. // hel<foo>lo 라고 출력됨

성공!

* 뿐만 아니라 수량을 나타내는 +, ? 그리고 {n,m} 뒤에도 ? 를 붙여서 사용 가능하다.

끗.
영양가 있는 포스팅인가요
(총 2분이 투표해서 5.0점) 5.0점
2012/02/14 11:23 2012/02/14 11:23

◀ PREV : [1] : [2] : [3] : [4] : [5] : ... [1346] : NEXT ▶