알고리즘 문제를 풀어가다 보니 replace()
와 정규식
을 활용해 풀면 편한 문제를 만났다. 구글링과 MDN, velog 그리고 같이 공부를 하는 팀원의 공유로 어느정도 이해를 하게되어 이렇게 글을 쓴다. 정규식에 대한 예시는 replace()를 활용한다.
replace(/[asdf]/e, ~) replace(/[^\w_.-]/g, "") ~~~~~~~~~~~
먼저 ( )
안에 정규식으로 원하는 값을 내도록 범위나 특정 조건을 걸어 활용할 수 있다.
"abbabbabb".replace(a, b)는 문자열에 a를 b로 치환하는 것이다.
/[asdf]/e
에서 [asdf]
는 문자열 조건에 해당하며, e
의 내용은 옵션에 해당한다. 예를 들어 i
는 대소문자의 구별없이 진행, g
문자열 전역으로 검색 등등이 있는데.. 처음 MDN에서 이런 설명만 보니 이해하기 너무 오래 걸렸다.. 정규식을 공부하는 개발자중 나처럼 시간 쏟는 일은 없길 바라며...
.replace(/[^\w_.-]/g, "") //제외(^), 숫자 및 알파벳(\w), _.- 를 문자열 전체에서(g), 빈 문자열로 치환("") // 문자열에서 [^\w_.-]에 해당하는 값 외외의 값은 제거 .replace(/[.]{2,}/g, ".") // 점(.) 두개 이상({2,}) 전부(g) 하나로 교체 ~~~~~ // {2, } 내부에 (,) 가 붙어야 {2개이상, ~개 이하} .replace(/[.]{2}/g, ".") //라면 점(.)이 2개 일때 1개로 치환이다. .replace(/^[.]+/, "") // 시작(^)에 점(.) 하나이상(+) 제거 .replace(/[.]+$/, "") // 끝($)에 점 하나 이상 제거 .replace(/^$/, "a") // 처음(^) 부터 끝($) 까지 아무것도 없다면 "a"로 교체 .replace(/[.]+$/, "") // 끝에 점 제거 ? .replace(/[b(a|e|i)d]/, "") // b로 시작해서 d로 끝나며 중간에 a 또는 e 또는 i 를 포함한 문자열 찾기. // bad , bed, bid 를 문자열에서 찾아 빈 문자열로 치환한다.
SAMPLE를 통해 구조가 어느정도 이해된다면, https://regexr.com/ 를 보는 것도 추천한다!