munifico.github.io

munifico's anything page

Follow me on GitHub

동적으로 정규식 만들기

이 장 초반에서 RegExp 생성자보다는 정규식 리터럴을 쓰는 편이 좋다고 했었습니다. 정규식 리터럴을 쓰면 타이핑하는 수고도 덜 수 있고, 자바스크립트 문자열에서 으레 하는 역슬래시를 사용한 이스케이프도 줄어듭니다. 하지만 RegExp 생성자가 필요할 때도 있는데, 동적으로 정규식을 만들어야 할 때가 그런 경우입니다. 예를 들어 사용자 이름의 배열이 있고 문자열에서 그 배열을 사용해 일치하는 사용자 이름을 찾고 싶다고 합시다. 정규식 리터럴만 써서는 사용자 이름을 알아낼 방법이 없습니다. 다음 예제를 볼까요.

const users = ['mary', 'nick', 'arthur', 'sam', 'yvette'];
const text = 'User @arthur started the backup and 15:15, ' +
            'and @nick and @yvette restored it at 18:35.';
const userRegex = new RegExp(`@(?:${users.join('|')})\\b`, 'g');
text.match(userRegex);
// [ '@arthur', '@nick', '@yvette' ]
이 예제에서 사용한 정규식을 리터럴로 만든다면 /@(?:mary nick arthur sam yvette)\b/g 일 겁니다. 하지만 여기서는 동적으로 정규식을 만들었습니다. 단어 경계 메타 문자인 b 앞에 역슬래시를 두 개 썼습니다. 역슬래시를 두 개 쓰지 않았다면 정규식 엔진은 \b를 리터럴 문자 b로 판단합니다.

이전 : 룩어헤드
다음 : 요약
목차