RegExp 생성자는 패턴을 사용해 텍스트를 판별할 때 사용합니다.
RegExp 객체는 리터럴 표기법과 생성자로써 생성할 수 있습니다.
리터럴 표기법
의 매개변수는 두 빗금으로 감싸야 하며 따옴표를 사용하지 않습니다.생성자 함수
의 매개변수는 빗금으로 감싸지 않으나 따옴표를 사용합니다./[\\w]{3, 12}/i // /정규표현식/플래그
new RegExp(/[\\w]{3, 12}/, 'i'); // 리터럴
new RegExp('[\\\\w]{3, 12}', 'i'); // 생성자
리터럴 표기법은 표현식을 평가할 때 정규 표현식을 컴파일합니다. 정규 표현식이 변하지 않으면 리터럴 표기법을 사용하세요. 예를 들어, 반복문 안에서 사용할 정규 표현식을 리터럴 표기법으로 생성하면 정규 표현식을 매번 다시 컴파일하지 않습니다.
정규 표현식 객체의 생성자(new RegExp('[\\\\w]{3, 12}')
) 를 사용하면 정규 표현식이 런타임에 컴파일됩니다. 패턴이 변할 가능성이 있거나, 사용자 입력과 같이 알 수 없는 외부 소스에서 가져오는 정규 표현식의 경우 생성자 함수를 사용하세요.
<aside>
💡 정규식 안에 변수
를 넣을 경우 생성자 함수를 통해서 정규표현식을 컴파일하여 사용됩니다.
const str = 'abc';
const regex = new RegExp(`[${str}]`, 'g');
console.log(regex) // /[abc]/g
const str2 = '-';
const regex2 = new RegExp(`\\\\w+[${op}]\\\\w+`);
console.log(regex2) // /\\w+[-]\\w+/
</aside>
ECMAScript 6 부터는 new RegExp(/[\\w]{3, 12}/, 'i')
처럼, 첫 매개변수가 RegExp
이면서 flags
를 지정해도 TypeError ("can’t supply flags when constructing one RegExp from another")
가 발생하지 않고, 매개변수로 부터 새로운 정규 표현식을 생성합니다.
생성자 함수를 사용할 경우 보통의 문자열 이스케이프 규칙(특수 문자를 문자열에 사용할 때 앞에 역빗금(\)을 붙이는 것)을 준수해야 합니다.
new RegExp(/\\w+/);
new RegExp('\\\\w+');