백준 Contact(1013번)문제를 풀 때 핵심로직이다.
/^(100+1+|01)+$/g.test(target) ? 'YES' : 'NO'
주로 정규표현식과 replace, match 함수를 조합하여 사용했다.
test()함수는 목표로 하는 문자열 통으로 정규표현식과 일치하는 지 확인할 때 쓰기 좋다. 반환값은 boolean이다.
정규표현식 MDN을 참고하여 공부했다. 이 자료에 정규표현식에 대한 알짜 정보들이 많아서 한 번 읽어보는 거 추천!!
let test1 = new RegExp(/^(1+)\s(1+23+)$/)
let test2 = new RegExp(`1+\s?1+${i.toString()}3+`)
이런 식인데 둘은 용도와 비용의 차이가 있다.
(용도) test1은 정규표현식이 변하지 않을 때 쓰고, test2는 정규표현식의 변화가 있을 때 쓴다.
(비용) test1은 변하지 않으니 코드를 읽을 때 컴파일 1회를 하고, test2는 런타임에 컴파일을 하게 된다. 따라서 반복문 안에 정규표현식이 있을 경우, 반복 횟수마다 컴파일이 된다.
(차이) test1은 정규표현식에 대각선 줄을 두 개 치는데, test2는 대각선을 지우고 따옴표로 대체한다.
이걸 쓸 때는 match()함수로 테스트 해줘야 하고, 매칭되는 것이 없을 때 반환은 null이다.