[javascript] 자바스크립트 문자열에 검색어가 있는지 찾기. indexOf()와 contains() 메서드 활용.

자바스크립트에는 문자열에서 검색어 문자열이 있는 첫 번째 인덱스 위치를 반환해주는 메서드가 있습니다.

let string = '아주 여러 해 전 바닷가 어느 왕국에 당신이 아는지도 모를 한 소녀가 살았지.', search = '왕국';
console.log(string.indexOf(search, 0));

문자열 객체의 메서드인 indexOf() 메서드는 첫 번째 파라미터로 검색 문자열을, 두 번째 파라미터로 시작 위치 인덱스를 넘기며, 검색 결과 찾는 문자열이 있으면 문자열이 처음 나오는 위치의 시작 인덱스를 반환합니다.

찾는 문자열이 없으면 -1을 반환합니다.

불리언으로 문자열이 있는지만 확인하고 싶으면 다음과 같이 조건식으로 비교하면 됩니다.

console.log(string.indexOf(substring) !== -1);

HTML 요소의 클래스 리스트에 특정 클래스가 있는지를 확인해주는 contains() 메서드처럼 검색어가 있으면 불리언 true를 반환해주는 메서드를 문자열 객체에 추가하면 조금 더 세련되게 검색어가 있는지 여부를 알 수 있습니다.

if (!String.prototype.contains) {
    String.prototype.contains = function(search, start) {
        'use strict';
  
        //시작위치가 숫자인지 체크
        if (typeof start !== 'number') {
            start = 0;
        }
        //시작위치+검색어길이가 문자열 끝보다 작은지 체크
        if (start + search.length > this.length) {
            return false;
        } else {
            //indexOf() 메서드로 검색어 위치 인덱스 확인
            return this.indexOf(search, start) !== -1;
        }
    };
}

기능적으로는 크게 새로울 것은 없지만 검색어가 있는지 확인할 때 다음과 같이 조금 더 알아보기 쉽고 간결하게 표현할 수 있습니다.

console.log(string.contains(substring));