반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 수학
- 자바스크립트
- 가천대
- 쉬운 문제
- javascript
- 타입 챌린지
- HTTP 완벽 가이드
- type challenge
- 크롤링
- 타입스크립트
- socket
- ip
- 그래프
- 소켓
- HTTP
- 프로그래머스 레벨 2
- Node.js
- 레벨 1
- 백준
- 프로그래머스
- BFS
- Crawling
- 문자열
- Nestjs
- Algorithm
- dfs
- 알고리즘
- typescript
- dp
- TCP
Archives
- Today
- Total
kakasoo
ReplaceAll, 동일한 문자열을 모두 대체한 다음의 문자열 본문
반응형
type ReplaceAll<S extends string, From extends string, To extends string> =
S extends From ? To : (
S extends `${From}${infer Rest}` ? `${To}${ReplaceAll<Rest, From, To>}` :
(S extends `${infer First}${From}${infer Last}` ? `${First}${To}${ReplaceAll<Last, From, To>}`:
(S extends `${infer First}${From}` ? `${First}${To}` : S)));
좀 복잡해보이지만 이렇게 정의할 수 있다.
S가 나올 수 있는 경우는
이미 From인 경우,
뒤에 다른 문자열 포함한 From인 경우,
앞과 뒤에 다른 문자열을 포함한 From인 경우,
그리고 앞에만 다른 문자열을 포함한 From인 경우,
From이 포함되지 않은 경우, 이렇게 5가지가 나온다.
type ReplaceAll<S extends string, From extends string, To extends string> =
From extends '' ? S :
S extends From ? To : (
S extends `${From}${infer Rest}` ? `${To}${ReplaceAll<Rest, From, To>}` :
(S extends `${infer First}${From}${infer Last}` ? `${First}${To}${ReplaceAll<Last, From, To>}`:
(S extends `${infer First}${From}` ? `${First}${To}` : S)));
여기에 From이 빈 문자열을 포함하면 모든 조건이 완료된다.
각 조건에 대해서는 나머지 문자 ( 반드시 뒷 부분이 되어야 한다, 앞은 재귀로 인해 이미 검증된 부분이기 때문 ) 를 재귀로 풀면 된다.
반응형
'프로그래밍 > TypeScript' 카테고리의 다른 글
Length Of String, 문자열의 길이를 출력하는 타입 (0) | 2023.03.27 |
---|---|
Append Argument (0) | 2023.03.24 |
Capitalize (0) | 2023.03.23 |
LookUp : 유니온 타입에서 'type' 프로퍼티가 일치하는 타입 찾기 (0) | 2023.03.23 |
Replace, 처음으로 만난 단어를 대체하여 새 문자열 만들기 (0) | 2023.03.22 |