2010년 7월 11일 일요일

자바 스크립트에서 trim()에 대한 단상

자바 스크립트는 trim() 함수를 지원하지 않는다.

그래서 정규식을 활용해서 구현해서 사용하는 것이 일반적이다.

 

주어진 문자열의 앞뒤를 동시에 트림하는 함수를 구현한 가장 일반적인 함수는 아래의 형태이다.

 

function trimboth1(str) {
  return str.replace(/^\s+|\s+$/g,'');
}

그런데, 인터넷을 뒤지다가 Faster Javascript Trim이라는 글을 찾았다.

글의 요지는 간단하다. 정규식을 이용하는 것이 가장 빠른 것이 아니라는 것.

 

코드의 길이가 좀 길어지더라도 더 빠른 함수가 필요하다면 아래와 같은 형태가 좋은 것 같다.

 

function trimboth2(str) {
  var space = '\s';
  var left=str.length, right=-1, i;
  for (i=0; i<str.length; i++) {
    if (space.indexOf(str.charAt(i)) == -1) {
      left = i;
      break;
    }
  }
  for (i=str.length-1; i>=left; i--) {
    if (space.indexOf(str.charAt(i)) == -1) {
      right = i;
      break;
    }
  }
  if (left>right) return '';
else return str.substring(left, right+1);
}

댓글 6개:

  1. 자주 쓴다면 확실히 아래의 것이 더 좋겠네요.

    답글삭제
  2. @koc/SALM - 2010/07/14 18:42
    네. 좀 길어져도 말이죠.

    답글삭제
  3. 이건 뭐 [b]?:[/b] 삼항 연산자 삽질이 사실은 if보다 느리다는 내용을 생각나게 하네요...

    답글삭제
  4. @Un-i-que - 2010/07/14 22:18
    정말인가요? 헐~

    답글삭제
  5. @BLUEnLIVE - 2010/07/15 00:22
    모르고 계셨나요 ? 설마 : 그럼 그렇지 [emo=003]

    답글삭제
  6. @Un-i-que - 2010/07/14 22:18
    C/C++ 환경에선 그렇지 않아 별 생각 없이 많이 썼는데, js에선 느릴 수 있겠군요. 고맙습니다.

    답글삭제