본문 바로가기

알고리즘

자바스크립트 정규식 Regular Expressions I

728x90

문제 : 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)으로 끝나는지 

 

 

 

 

아 마지막으로 정규식 확인할 때 좋은 사이트! 유닛테스트도 가능함

https://regex101.com/tests

 

Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript

Please wait while the app is loading...

regex101.com

 

 

 

 

 

 

 

 

 

'알고리즘' 카테고리의 다른 글

알고리즘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