코딩응애의 개발블로그

코플릿 풀면서 알게된 점 (정규식과 replaceAll() & /[^0-9]/g) 본문

코드스테이츠(부트캠프)

코플릿 풀면서 알게된 점 (정규식과 replaceAll() & /[^0-9]/g)

이너멜 2022. 8. 16. 11:54

코플릿 문제 조건에서 문자열중 숫자만 모두 찾아 더하는 조건이 있었는데 뭔가 다른 편한 방법이 있지 않을까? 해서 

구글에 검색을 해보았는데 정규식과 replace()를 이용해서 구하는 방법이 있었다.

예전에 replace 이용해서 문제 푸는것도 정규식을 이용을 했었는데 언제 한번 날잡고 공부해 봐야 겠다 

그리고 추가로 이거 정리하면서 알아낸게 js에는 replaceAll() 이라는 메소드가 없는줄 알았는데 최근에 새로 생겼다고 한다 

작년 그러니까 2021년이 되서야 ES2021(ES12) 표준 명세에 전역 문자열 바꾸기 메서드인 replaceAll() 이 추가되었습니다.

라고한다. 

근데 최근도 아닌 1년전임; 저번에 찾을때는 다 정규식과 replace 이용해서 풀어서 없는줄 알았는데... 뭐 둘다 알면 좋지

어쨋든 이게 중요한게 아니라 문자열중 숫자만 출력하는법에 대해 말해보자면 

let regex = /[^0-9]/g; 
let result = str.replace(regex, "");

이렇게 하면 regex가 숫자가 아닌 문자를 모두 선택하고 replace를 사용해서 숫자가 아닌 모든 문자를 지워준다.

근데  /[^0-9]/g 이게 정확히 뭔데? 0-9니까 숫자 출력하는거 아님? 이라고 생각할수 있지만 아니다.

일단 정규식 형식인 / 사이에 [0-9]모든 숫자를 매칭한다는 의미이지만 앞에 ^ 이게 붙으면 부정을 뜻함 

[^0-9]모든 숫자를 제외한 문자를 매칭한다는 의미가 됨 마지막에 g 발생할 모든 패턴에 대한 전체 검색을 뜻함 

g는 replace 할때 정리 했었음 (사실 까먹음)

출처 : https://jsikim1.tistory.com/38    

이렇게 하면 숫자만 출력되는걸 볼 수 있는데 또 문제가 하나 생긴다 이제는 문자열(문자와 공백과 숫자가 섞인)에서 

공백과 숫자를 제외한 나머지 문자열을 출력해야 하는데 여기서 많이 고민했다. 

일단 공백은 없앨수 있는데 숫자를 없애는 방법을 몰라서 구글링을 했는데 그래도 답이 안나오다가 겨우 발견함 

let regex2 = /[^a-z]/gi; // 문자만 출력 
let result2 = str.replace(regex2, "");
/[^a-z]/gi 여기서 바뀐점은 0-9가 a-z로 바뀌고 g옆에 i가 추가되었다는점 일단 i는 replace 할때 배웠는데 
대소문자 구분하지 말라는 의미이다. 그러면 a-z가 뭔지 감은 온다 0-9가 모든 숫자를 매칭하는 의미였으니 
a-z는 모든 알파벳(문자)을 매칭한다는 의미 아닐까? 실제로도 그렇다 근데 앞에 ^로 인해 모든 알파벳(문자)을 제외한 숫자를
매칭을 함 그 숫자를 replace로 지우니까 결국엔 알파벳(문자)만 남게 되는것이다.  그래서 결과로는
let str = 'Hello6 9World 2, Nic8e D7ay!';
let regex2 = /[^a-z]/gi;
let result2 = str.replace(regex2, "");
console.log(result2) // HelloWorldNiceDay 출력

따로 공백을 제거하거나 할필요없이 이렇게 출력이 된다. 

Comments