공식 문서에 따르면, 정규 표현식은 문자열에서 특정 문자 조합을 찾기 위한 패턴이라고 설명하고 있다.
JavaScript에서는 많은 표준 내장 객체(parseInt, Number, Error 등)들을 가지고 있는데, 이것들 중 문자열을 나타내는 객체로 문자열을 조작할 수 있게 해주는 텍스트 처리 기능을 가진 두 가지의 객체 중 하나로 정규 표현식을 가지고 있다. 다른 하나의 객체는 String 객체가 있다.
표준 내장 객체는 RegExp
이고 내장 객체로써 여러가지의 속성과 메서드를 가지고 있다. 속성들과 메서드들을 나열하기엔 너무 많으므로 더 알고싶다면 여기를 참고하기 바란다.
정규 표현식은 리터럴 표기법과 생성자, 이 두 가지 방법으로 생성할 수 있다.
new RegExp(/ab*c/, 'i'); // 리터럴 표기법
new RegExp('ab*c', 'i'); // 생성자
리터럴 표기법은 빗금(/
)으로 패턴을 감싸고, 생성자는 따옴표('
)로 패턴을 감싼다. 이처럼 눈에 보이는 차이도 있지만, 두 가지 방법은 다른 차이점도 존재한다.
먼저, 리터럴 표기법으로 정규 표현식을 만들 경우,
해당 정규 표현식은 정규 표현식이 정의된 스크립트 파일(ex)regExp.js
)을 불러올 때 컴파일된다.
이와 달리, 생성자로 정규 표현식을 만들 경우,
해당 정규 표현식은 런타임(runtime
)에 컴파일된다.
그래서 바뀔 일이 없는 패턴을 고정시켜놓고 사용하는 경우,
리터럴 표기법으로 정규 표현식을 만들어놓은 뒤에 여러 곳에 사용하면 성능면에서 보다 더 좋다.
하지만 패턴이 자주 바뀌는 경우(로직 자체에서 패턴이 유동적이어야 하거나, 외부 사용자의 입력에 따라 패턴이 바뀐다거나
),
생성자로 정규 표현식을 사용하는 것이 좋다.
JavaScript의 정규 표현식(RegExp
) 객체는 RegExp
객체 자체의 메서드 뿐만 아니라, String 객체의 메서드도 같이 사용할 수 있다. 그 목록은 다음과 같다.