String.prototype.indexOf()

indexOf() 메서드는 호출한 String 객체에서 특정 값의 첫 번째 일치하는 인덱스를 반환합니다. 일치하는 값이 없으면 -1을 반환합니다.  

문법

str.indexOf(searchValue[, fromIndex])

파라미터들

searchValue
찾고자 하는 문자열을 나타냅니다.
fromIndex Optional
문자열에서 찾기 시작하는 위치를 나타내는 인덱스 값입니다. 어떤 정수값이라도 가능합니다. 기본값은 0이며, 문자열 전체를 대상으로 찾게 됩니다. 만약 fromIndex 값이 음의 정수이면 전체 문자열을 찾게 됩니다. 만약 fromIndex >= str.length 이면, 검색하지 않고 바로 -1을 반환합니다. searchValue가 공백 문자열이 아니라면, str.length를 반환합니다.

설명

문자열 내에 있는 문자들은 왼쪽에서 오른쪽 방향으로 순번이 매겨집니다. 제일 처음 문자는 0번째 순번(index)이며, stringName 문자열의 마지막 문자의 순번 stringName.length -1 입니다. 

'Blue Whale'.indexOf('Blue');     // returns  0
'Blue Whale'.indexOf('Blute');    // returns -1
'Blue Whale'.indexOf('Whale', 0); // returns  5
'Blue Whale'.indexOf('Whale', 5); // returns  5
'Blue Whale'.indexOf('', 9);      // returns  9
'Blue Whale'.indexOf('', 10);     // returns 10
'Blue Whale'.indexOf('', 11);     // 전체 문자열의 길이가 10이므로, 10을 반환

대소문자 구분

indexOf() 메서드는 대소문자를 구분합니다. 예를 들면, 아래 예제는 일치하는 문자열이 없으므로 -1을 반환합니다: 

'Blue Whale'.indexOf('blue'); // returns -1

철자 확인하기(Checking occurrences)

'0'이라는 값이 true를 의미하지 않고, -1이 false를 의미하지 않습니다. 따라서, 임의의 문자열에 특정 문자열이 있는지를 확인하기 위해서는 아래 예제와 같은 방법으로 확인하시기 바랍니다: 

'Blue Whale'.indexOf('Blue') !== -1; 
// indexOf 메서드는 0을 반환하므로 결과값은 true
'Blue Whale'.indexOf('Bloe') !== -1; 
// indexOf 메서드는 -1을 반환하므로 결과값은 false

예제

indexOf()와 lastIndexOf() 사용하기

아래 예제는 "Brave new world" 문자열의 위치를 확인하기 위해 indexOf()와 lastIndexOf() 를 사용하고 있습니다.

var anyString = 'Brave new world';

console.log('The index of the first w from the beginning is ' + anyString.indexOf('w'));
// 첫번째 w 문자 위치는 8
console.log('The index of the first w from the end is ' + anyString.lastIndexOf('w'));
// 마지막 w 문자 위치는 10

console.log('The index of "new" from the beginning is ' + anyString.indexOf('new'));
// 첫번째 new 문자열 위치는 6
console.log('The index of "new" from the end is ' + anyString.lastIndexOf('new'));
// 마지막 new 문자열 위치는 6

indexOf()와 대소문자 구분

아래 예제에서는 2개의 문자열 변수를 정의하고 있습니다. 이 변수들 내에 있는 문자열들은 모두 같지만 두 번째 변수에 포함되어 있는 문자열은 대문자를 포함하고 있습니다. 첫 번째 console.log() 메서드의 결과값은 19입니다. 하지만, 두 번째 console.log() 메서드의 결과값은 -1입니다. 왜냐하면, indexOf() 메서드는 대소문자를 구분하기 때문에 myCapString에서 "cheddar" 문자열을 찾을 수 없기 때문입니다. 

var myString    = 'brie, pepper jack, cheddar';
var myCapString = 'Brie, Pepper Jack, Cheddar';

console.log('myString.indexOf("cheddar") is ' + myString.indexOf('cheddar'));
// 로그에 19를 출력합니다. 
console.log('myCapString.indexOf("cheddar") is ' + myCapString.indexOf('cheddar'));
// 로그에 -1을 출력합니다. 

indexOf() 를 사용하여 문자열 내의 특정 문자 숫자 세기

아래 예제는 str 문자열에서 e 문자의 총 숫자를 확인하는 프로그램입니다:

var str = 'To be, or not to be, that is the question.';
var count = 0;
var pos = str.indexOf('e'); //pos는 4의 값을 가집니다.

while (pos !== -1) {
  count++;
  pos = str.indexOf('e', pos + 1); // 첫 번째 e 이후의 인덱스부터 e를 찾습니다.
}

console.log(count); // 로그에 4를 출력합니다.

Specifications

Specification Status Comment
ECMAScript 1st Edition (ECMA-262) Standard Initial definition.
ECMAScript 5.1 (ECMA-262)
The definition of 'String.prototype.indexOf' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'String.prototype.indexOf' in that specification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'String.prototype.indexOf' in that specification.
Draft  

브라우저 호환성

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

관련문서

문서 태그 및 공헌자

 이 페이지의 공헌자: pusanbear
 최종 변경: pusanbear,