[js] 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
를 사용하도록 하자slice
는substring
의 용법을 포함하면서 음수도 사용이 가능하기 때문이다- 게다가 배열에서도 동일한 용법으로 사용이 가능하다.
substring
은 잊고slice
만 기억하자.
-
가져올 문자열의 끝위치를 알면 길이를 알 수 있고 길이를 알면 끝위치를 알 수 있다. 하지만 간단한 계산이라도 생략할 수 있다면 코드의 가독성은 더욱 좋아질 수 있기 때문에
- 시작위치와 끝위치를 알 경우에는
slice
를 사용 - 시작위치와 가져올 문자의 길이를 알 경우에는
substr
을 사용하도록 하자
- 시작위치와 끝위치를 알 경우에는