Javascript Cookbook

문자열에서 부분 문자열 검색하기

문제

대상 문자열 안에 특정한 부분 문자열이 있는지 찾고 싶다.

해결

String 객체의 내장 메서드 indexOf를 사용하면 부분 문자열의 위치를 알 수 있다.

var testValue = "This is the Cookbook's test string";
var subValue = "Cookbook";

var iValue = testValue.indexOf(subValue);   // 부분 문자열의 위치인 12를 반환

if(iValue != -1)    // 찾는 문자열이 존재하므로 성공

설명

String 객체의 indexOf 메서드는 인덱스 혹은 부분 문자열의 첫번째 글자가 있는 위치를 나타내는 숫자를 반환한다. 부분 문자열이 대상 문자열 안에 없는지 확인하려면 반환되는 값이 -1인지 살펴보면 된다.

if(iValue != -1)    // 부분 문자열이 있으면 참

indexOf 메서드는 두개의 인수를 갖는다. 첫번째 인수는 찾고자 하는 부분 문자열이고, 두번째 인수는 검색을 시작할 위치의 인덱스값이다. 두번째 인수는 생략할 수 있다.

var testValue = "This apple is my apple";
var iValue = testValue.indexOf("apple", 10);    // 두번째 부분 문자열의 인덱스 17을 반환

indexOf 메서드는 왼쪽에서 오른쪽으로 탐색한다. 그러나 때로는 문자열을 오른쪽에서 왼쪽으로 탐색하고 싶을 때가 있다. 이럴때는 String 객체의 lastIndexOf를 사용하면 된다. lastIndexOf는 가장 마지막에 나타난 부분 문자열의 인덱스 위치를 반환한다.

var testValue = "This apple is my apple";
var iValue = testValue.lastIndexOf("apple");    // 마지막에 나타난 부분 문자열의 위치 17을 반환

lastindexOf의 두번째 인수는 마찬가지로 생략할 수 있으며, 검색 시작 위치를 전달받는다.

"This apple is my apple".lastIndexOf("apple");  // 17 반환
"This apple is my apple".lastIndexOf("apple", 12);  // 5 반환
"This apple is my apple".lastIndexOf("apple", 3);  // -1 반환, 찾지 못했음

따옴표로 감싼 문자열에서 바로 String 메서드를 호출하는 것이 이상해 보일 수 있다. 자바스크립트에서는 문자열 변수에서 메서드를 호출하는 것과 문자열 리터럴에서 메소드를 호출하는 것 사이에는 아무런 차이가 없다.