날짜별 글 목록: 2015년 6월 12일

indexOf(), match()

indexOf()

일반적인 용도는 스트링에서 원하는 캐릭터의 인덱스값 추출이다.

var str = "산토끼 토끼야 어디를 가느냐 깡총깡총 뛰면서 어디를 가느냐";
str.indexOf("냐"); // 14 (인덱스는 0부터 시작하고 스페이스도 센다.)

분명 저 동요 마지막에도 “냐”가 있지만 처음 “냐”의 인덱스를 반환했다.
한 스트링에 여러개의 같은 캐릭터는 분명 존재한다. 이때는 어떤것을 추출하는지 모른다.
이럴대 시작 점을 지정해준다. 좀전에 14번째에 “냐”가 하나 있었으므로 그 다음으로 지정한다.

str.indexOf("냐",14); // 14 (x)
str.indexOf("냐",15); // 31 (o)

저말은 두번째 “냐”는 첫번째 인덱스에 +1을 한 만큼 부터 찾을 수 있다.

str.indexOf("냐",str.indexOf("냐")+1); // 31

이 str에는 “냐”가 두개뿐인데 이 범위를 넘어서 호출하면 어떻게 될까?

str.indexOf("냐",32); // -1

-1을 반환한다.
이 조건을 이용해 해당 캐릭터가 몇개있는지 세어볼 수 있다.

var char = "냐";
var idx = -1;
var sum = 0;
do {
 idx = str.indexOf(char,idx+1);
 if(idx != -1)
 sum++;
} while (idx != -1);
console.log("\""+char+"\"가 "+sum+"개 있습니다."); 
// "냐"가 2개 있습니다.

참고) lastIndexOf() – 뒤에서부터 검색한다.

match(regexp)

물론 이와같이 특정 문자를 문자열에서 알아보는데는 match()함수를 쓰면 간단하다. (정규표현식을 사용한다)

str.match(/냐/gi); // ["냐"],["냐"]
str.match(/냐/gi).length; // 2

flag

  • g : 완전일치(발생할 모든 pattern에 대한 전역 검색)
  • i : 대/소문자 무시
  • gi : 대/소문자 무시하고 완전 일치

생략할 경우 기본값은 g