자바 스크립트에서 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);
}

Trackback 0 Comment 6
  1. Favicon of http://salm.pe.kr/ BlogIcon koc/SALM 2010.07.14 18:42 address edit & delete reply

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

    • Favicon of http://zockr.tistory.com BlogIcon BLUEnLIVE 2010.07.14 22:06 address edit & delete

      네. 좀 길어져도 말이죠.

  2. Favicon of http://un-i.tistory.com/ BlogIcon Un-i-que 2010.07.14 22:18 address edit & delete reply

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

    • Favicon of http://zockr.tistory.com BlogIcon BLUEnLIVE 2010.07.15 00:22 address edit & delete

      정말인가요? 헐~

    • Favicon of http://un-i.tistory.com/ BlogIcon Un-i-que 2010.07.17 12:54 address edit & delete

      모르고 계셨나요 ? 설마 : 그럼 그렇지 [emo=003]

    • Favicon of http://zockr.tistory.com BlogIcon BLUEnLIVE 2010.07.17 14:19 address edit & delete

      C/C++ 환경에선 그렇지 않아 별 생각 없이 많이 썼는데, js에선 느릴 수 있겠군요. 고맙습니다.