LearnApplyShare

[js] slice, substr, substring

September 03, 2018 - [string, slice, substr, substring]

자바스크립트에서 문자열의 일부를 추출하고자 할 때 사용할 수 있는 함수는 slice, substr, substring 3가지가 있다. 이 글에서는 3가지 함수의 용법을 정확히 이해하고 어느 경우에 어떤 함수를 사용하는 것이 좋을 지 안내한다


slice 와 substring 의 용법

위 2가지 함수는 용법이 동일하다. 가져올 문자열의 시작위치와 끝위치를 인자로 받는다.

2개의 인자 모두 양수일 경우

var str = "0123456789"
str.slice(2, 5) // "234"      // 두번째 인자의 끝 위치는 추출될 문자열에 포함되지 않는다
str.substring(2, 5) // "234"

2번째 인자가 생략될 경우 시작 위치부터 마지막까지 가져온다 ```javascript var str = "0123456789"; str.slice(2); // "23456789" str.substring(2); // "23456789" ``` 여기까지는 두 함수의 결과가 동일하다. 하지만 아래부터는 결과가 다르다.

slice 만의 용법

첫번째 인자로 음수를 사용할 경우 slice 는 뒤에서부터 인덱스를 거꾸로 계산하여 시작위치부터 끝위치까지 문자열을 추출한다.

var str = "0123456789"
str.slice(-5, -2) // "567"    // -5 위치부터 -2 위치까지 문자열 추출(마지막 위치 문자는 제외)
str.substring(-5, -2) // ""   // substring 은 음수를 제대로 처리하지 못한다.

음수 인자 하나만 주어질 경우에는 뒤부터 거꾸로 계산되는 시작위치부터 마지막까지 문자열을 추출한다.

var str = "0123456789"
str.slice(-3) // "789"    // -3 위치부터 마지막까지 문자열 추출
str.substring(-3) // "0123456789"  // substring 은 역시 음수를 제대로 처리하지 못한다.

또한 slice 는 배열에서도 동일하게 사용할 수 있다.(물론 String.prototype.slice 와 Array.prototype.slice 는 서로 다른 함수지만 용법이 동일하다는) ```javascript var arr = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; arr.slice(3,6); // ["3", "4", "5"] arr.slice(-4); // ["6", "7", "8", "9"] arr.slice(-4, -1); //["6", "7", "8"] ```

substr 의 용법

substr 은 추출할 문자열의 시작위치와 길이를 인자로 받아서 문자열을 추출한다

var str = "0123456789"
str.substr(3, 4) // "3456"

1개의 인자만 전달될 경우, 해당 위치부터 마지막까지 문자열을 추출한다. ```javascript var str = "0123456789"; str.substr(5); // "56789" ```
시작위치로 음수도 사용이 가능하다. ```javascript var str = "0123456789"; str.substr(-3); // "789" // -3 위치부터 마지막까지 추출 str.substr(-5, 3); // "567" // -5 위치부터 3글자 추출 ```
두번째 인자로 음수를 전달하면 당연히 이상한? 결과가 출력된다(괜히 적절하지 않은 인자 전달은 삼가하자) ```javascript var str = "0123456789"; str.substr(-5, -2); // "" ```

결론

  • substring 보다는 slice 를 사용하도록 하자

    • slicesubstring 의 용법을 포함하면서 음수도 사용이 가능하기 때문이다
    • 게다가 배열에서도 동일한 용법으로 사용이 가능하다.
    • substring 은 잊고 slice 만 기억하자.
  • 가져올 문자열의 끝위치를 알면 길이를 알 수 있고 길이를 알면 끝위치를 알 수 있다. 하지만 간단한 계산이라도 생략할 수 있다면 코드의 가독성은 더욱 좋아질 수 있기 때문에

    • 시작위치와 끝위치를 알 경우에는 slice 를 사용
    • 시작위치와 가져올 문자의 길이를 알 경우에는 substr을 사용하도록 하자