17.3 정규식 검색
정규식이 만들어지면 다양한 옵션으로 문자열을 검색할 수 있습니다.
정규식의 문자열 교체 옵션에 대해 이해하려면 정규식 메타 언어에 대해 좀 알아야 하는데, 정적인 문자열을 예제로 사용한다면 좀 지루할 겁니다.
예제로 사용할 정규식은 /\w{3,}/ig
입니다.
이 정규식은 세 글자 이상인 단어에 모두 일치하고, 대소문자는 가리지 않습니다.
당장 이해되지 않아도 괜찮습니다.
이 장을 진행하다 보면 자연히 알게 될 겁니다.
먼저 검색하는 방법을 알아봅시다.
const input = "As I was going to Saint Ives";
const re = /\w{3,}/ig;
// 문자열(input)의 메서드를 사용할 때
input.match(re); // ["was", "going", "Saint", "Ives"]
input.search(re); // 5 (세 글자 이상으로 이루어진 첫 단어의 인덱스는 5입니다.)
// 정규식(re)의 메서드를 사용할 때
re.exec(input); // ["was"] (처음 일치하는 것)
re.exec(input); // ["going"] (exec는 마지막 위치를 '기억'합니다.)
re.exec(input); // ["Saint"] (exec는 마지막 위치를 '기억'합니다.)
re.exec(input); // ["Ives"] (exec는 마지막 위치를 '기억'합니다.)
re.exec(input); // null -- 일치하는 것이 더는 없습니다.
re.test(input); // true (input에는 세 글자 이상으로 이루어진 단어가 한 개 이상 있습니다.)
// 위 예제는 모두 정규식 리터럴을 그대로 써도 됩니다.
input.match(/\w{3,}/ig);
input.search(/\w{3,}/ig);
/\w{3,}/ig.test(input);
/\w{3,}/ig.exec(input);
// ...
이중 가장 많은 정보를 제공하는 것은 RegExp.prototype.exec
메서드지만, 현실적으로는 아마 가장 적게 쓰는 메서드일 겁니다.
필자는 String.prototype.match
와 RegExp.prototype.test
를 가장 자주 쓰는 편입니다.