나의 IT Note

[JavaScript] indexOf() 특정 문자 위치 찾기 - 자바스크립트 본문

JavaScript

[JavaScript] indexOf() 특정 문자 위치 찾기 - 자바스크립트

MaCoder 2021. 7. 24. 10:45

String.indexOf()

문자열에서 원하는 문자의 위치를 찾거나 배열에서는 배열 값의 존재 여부를 확인하는 방법으로 indexOf() 함수가 사용된다. 

문법(Syntax)

str.indexOf(searchValue[, fromIndex])
  • searchValue가 처음으로 탐색되는 index를 반환하고 존재하지 않으면 -1을 반환한다. 
  • 문자열을 찾을 때는 대소문자를 구분한다. 
  • 배열에서도 사용 가능하다.

매개변수(Parameter)

1. searchValue

  • 찾으려는 문자열
  • 아무값도 주어지지 않으면 'undefined'를 찾으려는 문자열로 사용한다. 
let str = 'hello world';
str.indexOf('e'); // 1
str.indexOf('E'); // -1
str.indexOf('a'); // -1

문자열과 index를 매칭 하면 아래와 같다.

문자열: hello world
h e l l o 공백 w o r l d
0 1 2 3 4 5 6 7 8 9 10

문자열에서 'e'가 존재하는 index는 1이므로 1을 반환

대문자 'E'와 'a'는 문자열에 존재하지 않으므로 -1을 반환

2. fromIndex(optional)

  • 문자열에서 탐색하기 시작하는 위치로 기본값은 0이다.
  • fromIndex의 값이 양의 정수이면 해당 index부터 찾는다.
  • fromIndex의 값이 음의 정수이면 전체 문자열에서 찾는다.(기본값과 동일)
lex str = 'hello world';
str.indexOf('o', 4); // 4
str.indexOf('o', 5); // 7
str.indexOf('o', -10); // 4

fromIndex값이 4이므로 str의 index 4(o wolrd)부터 'o'를 탐색한다.

탐색한 'o'의 실제 index인 4를 반환한다.

 

마찬가지로 fromIndex 5는 (공백) world부터 탐색하여 hello에 있는 'o'는 무시하고 world에 있는 'o'를 탐색하여 7을 반환한다.

fromIndex값이 음수인 경우는 기본값인 0을 기준으로 문자열 전체를 탐색하여 4를 반환한다.

문자열 내의 특정 문자가 있는지 확인하는 방법

let str = 'hello world';
if(str.indexOf('h') !== -1) {
  console.log('true');
} else {
  console.log('false');
}
// true

문자열에 'h'가 있으면 'true'를 없으면 'false'를 표시한다.

요소를 찾을 수 없는 경우 반환하는 -1을 반환한다.

 

문자열 내의 특정 문자 개수 구하기

let str = 'hello world';
function getIndexOfNum(str, searchValue) {
  let count = 0;
  let pos = str.indexOf(searchValue);
  while(pos !== -1) {
    pos = str.indexOf(searchValue, pos + 1);
    count++;
  }
  return count;
}
getIndexOfNum(str, o); // 2
getIndexOfNum(str, l); // 3
  1. 두 번째 매개변수의 index를 찾아 변수 pos 대입한다.
  2. while문에서 pos가 -1이 아니면 pos에 1을 더한 값을 fromIndex값에 대입하여 그다음 값을 반복적으로 찾는다.
  3. count를 0에서부터 증가시킨다.
  4. 매개변수 searchValue가 더이상 문자열에 존재하지 않으면 while문을 종료시킨다.
  5. count의 값을 반환한다.

해당 문자열에는 'o'가 2개 'l'은 3개가 존재한다.

문자열의 n번째 위치 index값 가져오기

let str = 'hello wolrd hello wolrd';
function getIndexOfPos(str, searchValue, nth) {
  let count = 0;
  let pos = 0;
  while(count < nth && pos !== 1) {
    if(str.indexOf(searchValue) === 0) {
      if(nth === 1) {
        pos = 1;
        break;
      }
      count = 1;
    }
    pos = str.indexOf(searchValue, pos + 1);
    count++;
  }
  return pos;
}
getIndexOfPos(str, 'h' 2); // 12
getIndexOfPos(str, 'h' 1); // 1
  1. while문의 count가 nth(찾고자 하는 n번째 위치) 보다 작거나 없는 경우까지 실행
  2. str.indexOf(searchValue)가 0인 경우 예외처리(뒤 구문에서 fromIndex에 pos + 1을 연산하여 fromIndex가 0인 경우는 제외가 되기 때문)
    1. nth가 1이면 pos에 1을 대입 후 while문 종료 후  pos 값 반환
    2. count 변수에 1을 대입하여 index가 0 다음부터 searchValue 검색 시작 후 pos 값을 반환
  3. pos에 1을 더한 값을 fromIndex값에 대입하여 그 다음 값을 반복적으로 찾는다.
  4. count가 nth보다 작아지거나 매개변수 searchValue가 더 이상 문자열에 존재하지 않으면 while문을 종료시킨다.
  5. pos 값을 반환한다.

문자열에 있는 특정 문자 위치 모두 찾기

let str = 'hello world'(
function getIndexOfPosFind(str, searchValue) {
  let pos = 0;
  while(true) {
    let posFind = str.indexOf(searchValue, pos);
    if(posFind === -1) break;
    console.log(posFind);
    pos = posFind + 1;
  }
}
getOndexOfPosFind(str, 'l'); // 2, 3, 9

워와 같이도 사용할 수 있다.

배열의 경우 배열 index를 반환

let arr = ['apple', 'banana', 'orange'];
arr.indexOf('banana'); // 1
 

lastIndexOf() 특정 문자 위치 찾기 - 자바스크립트[JavaScript]

String.lastIndexOf() indexOf()와 동일하게 문자열에서 원하는 문자의 위치를 찾거나 배열에서 배열값의 위치를 확인하는 방법으로 lastIndexOf() 함수가 사용된다. indexOf()와 차이점 fromIndex로부터 역순(오.

ak-coding.tistory.com

 

반응형
Comments