[Javascript] 특정 문자 위치 모두 찾기
April 06, 2024
문자열에서 특정 문자나 문자열의 위치(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)
: Indexposition + 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