정규표현식
-
[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이기 때문에, 탐색을 이어가기 위..
-
[Regex] Pattern 객체를 이용해 효율적으로 replaceAll() 사용하기개발/자바 2020. 9. 16. 15:05
입력을 받을 때마다 공백을 제거해야 하는 일이 생겼습니다. 자바스크립트는 조금 다른 것 같은데 자바나 C++은 코드 길이가 짧을수록 성능이 안 좋아지는 경우가 많은 것 같습니다. 매번 replaceAll() 호출해 공백을 없애는 게 찝찝해서 효율적인 방법이 있는지 알아보았습니다. String.replaceAll()은 호출될 때마다 regex를 컴파일하기 때문에 성능에 안 좋은 영향을 줍니다. Pattern 객체를 이용하면 이를 피해갈 수 있습니다. Pattern p = Pattern.compile("[ ]*"); System.out.println(p.matcher("Hello World").replaceAll("")); 더하기 기호가 아니라 별 기호를 써줘야 빈 문자열을 replace하지 않아 속도를 올..