-
[Regex] test() 사용시 전역 플래그(g 플래그)개발/Javascript 2022. 8. 31. 14:34
공식문서의 내용을 참고하면 좋다.
전역 플래그는 모든 문자열에서 정규식 규칙을 찾는데,
test()에서 사용할 때(exec도 동일) 일치하는 문자열을 찾으면(true)
다음 탐색을 위해 lastIndex를 갱신한다.
일치하는 문자열을 못 찾으면(false) lastIndex을 0으로 초기화한다.
이메일 정규식으로 테스트해보자.
const emailRegex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/g;
.com으로 끝나는 정상 이메일 주소를 입력해보자.
co까지 입력하면 true가 나오는데 m을 입력하는 순간 false가 판정된다.
검사 의도는 com으로 입력을 완료했을 때 true가 나와야 하는 것이다.
왜냐하면 마지막 true 판정이 com의 o이기 때문에,
탐색을 이어가기 위해 lastIndex가 m 위치로 갱신되기 때문이다.
emailRegex로 m을 판정하면 false가 나올 수밖에 없다.
그전까지는 계속 false가 판정되므로 이메일을 입력할 때마다
이메일 문자열의 처음부터 검사하므로 문제가 없었다.
'개발 > Javascript' 카테고리의 다른 글
[Task queue] click과 promise (0) 2022.10.05 [Webpack] Typescript 설정 추가 (0) 2022.08.09 [Webpack 5] externals (0) 2022.08.08 [Webpack 5] Optimization.minimizer (0) 2022.08.07 ESLint(feat. Prettier) (0) 2022.08.05