문제 : 3글자 이상의 소문자 알파벳으로 이루어진 문자열. 첫글자와 마지막 글자가 같은 모음(a,e,i,o,u)이라면 true 반환
일단 main함수에 test는 뭐지? 하고 이것부터 당황했따 ㅋㅅㅋ
자바스크립트 제대로 해본적이 없고..걍 검색하면서 풀어야지 했던거라서..
const re = regexVar();
console.log(re.test(s));
test()를 쓰면 정규식을 확인하고 true / false로 반환해주는 거 였음
일단 맨 첫글자가 모음인 거 찾는 거까진 당연히 쉬웠다.
마지막 글자가 이 첫 글자와 같아야 하는데
처음엔 replace해서 기존 문자열과 변경된 문자열을 비교할까 했는데 test()를 쓰고 있으니 더 복잡해지는 소리였다.
찾아보니 앞에서 찾아낸 정규식문자를 저장하는 기능이 있었다.
한국어로는 포획 괄호라고 부르던데 저장하고 싶은 정규식을 ()로 감싸주면 그 안의 결과를 저장가능!
근데 모든 블로그에서 전체적인 정규식 설명만 있고 포획 괄호에 대한 설명은 많이 없더라...
re[0]이나 $1,$2 로 사용하라고 하는데....이렇게 쓰는게 아닌건가
앞 글자 판단하고 그 저장한 값으로 다시 정규식을 쓰려고 했는데
(짧은 정규식을 두번 하려고 했는데)
결국 그냥 답을 검색해버렸닷... \1 로 써야했음....\1$ 이면 앞의 ()에 저장된 값으로 끝나는지 판단!
저 값을 굳이 저장안해도 그 식에서 바로 쓸 수 있구나....! 저장해서 쓰는 방법 모르겠음 ㅠ
정답 : ^([aeiou]).+\1$
설명: ^([aeiou]).+\1$
^ 첫번째 글자에 있는지 판단
() 포획괄호(뒤에서 쓰기 위해 저장한다)
[] 여기 있는 값 중 하나
=> 첫 글자가 a,e,i,o,u로 시작하는지? 그리고 그 첫글자를 ()로 저장
. 모든 문자
+ 문자 1개 이상
=> 3글자 이상의 알파벳이었으므로 중간에 1개 이상의 문자가 아무거나 있는지
\1 아까 저장한 값
$ 앞에 문자로 끝나는지
=> 마지막 글자가 아까 포획괄호에서 저장한 값 (a,e,i,o,u)으로 끝나는지
아 마지막으로 정규식 확인할 때 좋은 사이트! 유닛테스트도 가능함
'알고리즘' 카테고리의 다른 글
알고리즘1 The HALTING Problem (0) | 2020.09.01 |
---|---|
java HashMap (0) | 2020.08.16 |
extends와 implements차이, Covariant Return Type (0) | 2020.08.02 |
For문 runtime에러 (luck-balance) (0) | 2020.07.30 |
Climbing the Leaderboard (0) | 2020.07.27 |