공부중에 정규식이 나와서 정리 해봤습니다.
전체적인 내용이 아닙니다.
export const formatNumber = (num) => {
// 숫자가 3자리 이상 있을경우 , 를 붙이기
num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
};
1. \d 는 Digit, 0~9까지의 숫자를 매치해줍니다.
2. \w 는 모든 문자(숫자포함) 매치해줍니다.
3. {num} : 일치하는 num의 개수만큼 매칭
예시 : \d{4} 숫자중 4개씩 매칭, 4개가 넘어갈경우 앞에서부터 4개 ( 예시 12345)
\w도 똑같습니다.
4. {num1, num2} : num1 부터 num2 까지의 개수만큼 매칭
3개 4개 5개를 찾아 매칭해줍니다.
특정 단어로 시작하며 뒤에 숫자가 2~4개 붙은경우
특정 단어로 시작하며 (숫자,문자)가 2~4개 붙은경우
5. Negative lookahead
\d(숫자)뒤에 (?!px) px가 붙지 않은 숫자!
6. Positive lookahead
\d(숫자)뒤에 (?=px) px가 붙은 숫자!
7. 섞어서 사용해보기
7-1 \d{3} 숫자 3개를 찾는데 ?!\d 뒤에 숫자가 없는 경우
7-2 뒤에 숫자가없는 3개의 숫자를 찾아라 (여러개)
(위와 거의 같지만 가운대에 +가 있습니다.)
+를 사용해서 1개 이상을 매칭시키려고함(여러개를 찾고자 할 때)
1234567890 처럼 붙어있어도 1 234 567 890 과 같이 잡혀있습니다.
(추측이지만, 890 을 찾고 그걸 제외한 1234567 에서 567을 찾고 또 제외하고 1234에서 234를 찾는것 같습니다)
즉 이미 매칭된 것은 제외하고 찾는 것 같습니다.
7-3 뒤에 숫자가 없는 3자리숫자의 앞의 숫자
7-1의 (\d{3})(?!\d)은 뒤에 숫자가 없는 3개의 숫자 (890) , 이걸 이용해서
\d(?=(\d{3})(?!\d)) , 그 숫자를 뒤에 포함한 숫자 \d(?=890)을 뒤에 둔 숫자
위의 지문을 다 이해하고 나서 보면
export const formatNumber = (num) => {
// 숫자가 3자리 이상 있을경우 , 를 붙이기
num.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
};
\d 숫자를 찾는다
?= 뒤의 조건을 만족하는걸
(\d{3}) 숫자가3개
+ 여러개를 찾는다
(?!\d) 숫자가 없다
/g 전체에서
합쳐보면
\d(?=(\d{3})+(?!\d)) 뒤에 숫자가 없는 3개의 숫자의 앞의 숫자 (말이 이상하다..) 를 여러개 찾는다.
내가 정리 해놓고도 이상하다..
뭐,.. 나만 이해하면 된 건가