고정 패턴은 리터럴, 동적 패턴은 생성자로 만들어
/pattern/flags형태의 정규식 리터럴은 짧고 읽기 쉬워. 코드가 파싱될 때 패턴도 함께 정해져.new RegExp('pattern', 'flags')는 문자열로 패턴을 받으므로 실행 중에 값을 조합할 수 있어.
패턴이 코드에 고정돼 있다면 리터럴을 쓰고, 사용자 선택이나 변수로 패턴을 만들어야 할 때만 생성자를 사용해.
정규식 객체와 문자열이 역할을 나눠 가져
regex.test(str)는 매칭 여부만 참이나 거짓으로 돌려줘.regex.exec(str)는 일치 정보를 돌려주며,/g와 함께 반복 호출할 수 있어.str.match(regex)는/g가 없으면 첫 매칭 정보, 있으면 전체 매칭 목록을 돌려줘.str.matchAll(regex)은/g정규식의 모든 일치 정보를 반복자로 제공해.str.replace와str.replaceAll은 매칭한 부분을 바꾸고,split은 패턴을 경계로 문자열을 나눠.str.search(regex)는 첫 매칭의 위치를 돌려주고, 찾지 못하면-1을 돌려줘.
/g 정규식은 lastIndex 상태를 가져
같은 전역 정규식에 exec를 여러 번 호출하면 이전 매칭이 끝난 위치부터 다음 검색을 시작해. 그래서 같은 입력을 다시 검사할 때 예상치 못한 실패가 보이면 lastIndex를 확인해야 해. 모든 결과를 한 번에 순회하려는 목적이라면 matchAll이 더 분명해.
생성자 문자열에서는 백슬래시를 한 번 더 써
new RegExp('\\d+')처럼 JavaScript 문자열 단계의 이스케이프가 먼저 적용돼. 원시 백슬래시를 유지하고 싶다면 new RegExp(String.raw`\d+`)처럼 String.raw 태그 템플릿을 사용할 수 있어.