문자열에서 특정 문자나 문자열의 위치(Index)를 찾는 방법에 대해서 알아보겠습니다. 보통 함수는 1개의 문자 위치만 찾지만, 반복문을 이용하여 모두 찾도록 구현할 수도 있습니다.

Index를 사용하여 특정 문자열을 자르거나, 문자열이 포함되어있는지 확인할 때 이런 방법을 사용할 수 있습니다.

1. indexOf()를 이용한 방법

indexOf() 함수를 사용하여 문자열에서 특정 문자열의 첫 번째 위치를 찾을 수 있습니다. 해당 문자열이 없으면 -1을 리턴합니다. 특정 문자열이 2개가 존재해도, 문자열 왼쪽부터 가장 먼저 찾은 문자열의 Index를 리턴합니다.

const text = "Hello, World! This is an example. World";
const searchString = "World";
const position = text.indexOf(searchString);

if (position !== -1) {
  console.log(`"${searchString}"는 Index ${position} 위치에 있습니다.`);
} else {
  console.log(`"${searchString}"를 찾을 수 없습니다.`);
}

Output:

"World"는 Index 7 위치에 있습니다.

2. lastIndexOf()를 이용한 방법

lastIndexOf()indexOf()와 동일하지만, 특정 문자열을 찾는 방향이 반대입니다. 이 함수는 문자열의 끝에서 시작 방향으로 문자열을 찾으며, 특정 문자열이 두개가 있을 때 오른쪽에 있는 것이 먼저 발견되어 해당 index가 리턴됩니다. 해당 문자열이 존재하지 않으면 -1을 리턴합니다.

const text = "Hello, World! This is an example. World";
const searchString = "World";
const position = text.lastIndexOf(searchString);

if (position !== -1) {
  console.log(`"${searchString}"는 Index ${position} 위치에 있습니다.`);
} else {
  console.log(`"${searchString}"를 찾을 수 없습니다.`);
}

Output:

"World"는 Index 34 위치에 있습니다.

3. 정규표현식을 이용한 방법

string.search(pattern)은 정규표현식 패턴에 해당하는 문자열을 찾고 위치를 Index로 리턴합니다. indexOf()와 동일하게 탐색 방향은 문자열 시작에서 끝 방향입니다. 패턴과 일치하는 문자열이 없으면 -1을 리턴합니다.

  • 패턴 /World/는 문자열 World를 찾으라는 의미
const text = "Hello, World! This is an example. World";
const searchString = /World/; // 정규 표현식으로 검색할 문자열 지정

const position = text.search(searchString);

if (position !== -1) {
  console.log(`정규표현식 "${searchString}"에 해당하는 문자열은 Index ${position} 위치에 있습니다.`);
} else {
  console.log(`정규표현식 "${searchString}"에 해당하는 문자열을 찾을 수 없습니다.`);
}

Output:

정규표현식 "/World/"에 해당하는 문자열은 Index 7 위치에 있습니다.

4. 특정 문자 모두 찾기

위의 예제들은 가장 먼저 찾은 특정 문자열의 Index를 찾는 방법이었습니다.

만약 모든 특정 문자열을 찾고 싶다면, for문을 사용하여 반복적으로 문자열을 찾으면 됩니다.

  • text.indexOf(searchString) : 문자열의 Index 0부터 끝까지 searchString을 찾음
  • text.indexOf(string, index) : text의 index 부터 string을 찾음
  • text.indexOf(searchString, position + 1) : Index position + 1부터 끝까지 searchString을 찾음. 이전에 찾은 특정 문자를 다시 찾지 않기 위해, 그 다음 위치부터 찾도록 탐색을 시작할 index를 변경함
  • 더 이상 찾을 것이 없다면 indexOf()에서 -1을 리턴하며 while문 탈출
const text = "Hello, World! This is an example. World";
const searchString = "World";
let position = text.indexOf(searchString);

const positions = [];

while (position !== -1) {
  positions.push(position); // 현재 위치를 배열에 추가
  position = text.indexOf(searchString, position + 1); // 다음 위치 검색
}

if (positions.length > 0) {
  console.log(`"${searchString}"의 위치: ${positions.join(", ")}`);
} else {
  console.log(`"${searchString}"를 찾을 수 없습니다.`);
}

Output:

"World"의 위치: 7, 34