이거 알아보려고 구글링하다가 어떤 블로그를 들어갔는데 내가 예전에 쓴 내 블로그였다. 너무 웃겼다ㅋㅋㅋㅋㅋ
그 글이 왜 최상단에 떠있는지 모르겠다. 엄청 대충 적었는데,,, 조회수도 엄청 많았다. 참 신기했다.
아무튼 간에 제안받은 회사의 알고리즘 문제를 풀다가
const str = 'sdfe wefwef sdfsdf [werwe, erter], sdfsdfwe [sdfsdf] sddolgndf [werh8]'
이런 문자열에서 [ ]사이의 문자열을 추출해야 하는 상황이 있었다. 결국 이 방법을 쓰지 않고 풀었지만,
나름대로 정규식 공부도 되고 도움이 되었다.
처음에는 정규식을
'\[(.*?)\]'
이렇게 썼었는데 그렇게 되면 다음과 같이 처음 여는 대괄호와 마지막의 닫는 대괄호 안의 문자열을 통채로 가져왔다.
result = '[werwe, erter], sdfsdfwe [sdfsdf] sddolgndf [werh8]'
내가 원하는 것은 [ ]사이의 모든 문자열을 가져와야 했으므로
const result = Array.from(str.matchAll('\\[(.*?)\\]'), match => `${match[0]}`);
이렇게 해줘야 했다.
\
백슬래시 : 문자열에서의 백슬래시와 똑같이, 자신의 바로 뒤에 오는 특정 기능을 하는 무언가를 아무기능도 하지 않는 일반 문자로 만들어 준다.
^
문자열의 첫부분인지 검사한다.
$
문자열의 마지막 부분인지 검사한다.
*
앞에 오는 문자가 0회 이상 반복되는지 검사한다.
+
앞에 오는 문자가 1번 이상 반복되는지 검사한다. * 과 다르게 무조건 한 번 이상 와야한다.
?
앞에 오는 문자가 0번 or 1번 반복되는지 검사한다.
.
개행문자 \n 을 제외한 모든 문자열 중 하나에 일치하는지 검사한다.