[javascript] javascript boot camp 16기 열번째 수업
2020-09-21
자바스크립트 부트캠프 16기 열번째 수업
숫자형, 문자형, wrapper 오브젝트 등 알아봤음.
프론트엔드개발자는 문자열 다룰 일이 많음
ascii는 너무 오래 됐고, unicode 문자 테이블을 표준으로 씀
unicode의 현재 버전은 2.0
영문자든 한글자든 길이 length가 같음
그런데 문제는 뭐냐? 제3세계문자를 처리하는데 문제가 재현되는게 있는데 emoji에서 문제가 재현된다..
text.indexOf('string'); // -1이 있느냐 없느냐. 포함이 됐으면 0보다 크거나 같고, 포함이 안됐으면 -1 을 반환함
// 하지만 indexOf보단
text.includes('string'); // 이게 더 쓰기좋음. true / false 반환해줘서..
text.split(','); // 괄호안에 들어가있는 문자 기준으로 나눠서 배열로 반환해줌
split 예
const data = '12, 23, 31, 15';
// [{age: 12}, {age: 23}, ...]
const arr = data.split(',');
const obj = arr.map(function(age){
return {age: Number(age)}
})
const obj = data.split(',').map(function(age){
return { age: Number(age) }
})
console.log(obj)
replace 예
const telNum = '010-3334-2123';
telNum.replace('-', '.'); // 첫번째만 바꿈. console.log(telNum) => 010.3334-2123;
telNum.replace(/-/g, '.'); // 정규식을 이용해 바꾸면 모두 다 바껴진다. 010.3334.2123
문자열만을 탐색하는데 최적화돼어있는 작은 프로그래밍 언어: 정규식
낙타표기법변환 숙제 ㅎㅎ
넣으면 낙타표기법으로 반환되는 로직을 짜보기~
정규표현식
정규표현식은 고수준의 언어가 아니다.. 각각의 표현은 기호로 대체해서 사용하고있어서 편하게 읽히진않음
자주 쓰는 정규표현식을 담은것 : 초보자를 위한 정규 표현식 가이드
플래그
- g: 탐색이 끝나도 끝까지 계속 찾음. 대상문자열 전체로 검색대상을 지정. global의 약자
- gi: 민감도가 높은게 default인데, global intensible 라고 민감도를 낮추면 소문자도 같이 검색대상에 포함됌
어떤 의미, 형식을 내포하고 있는 문자를 찾는 일이 많다.
그걸 표현할 수 있는 메타문자 표현이 필요함
/./ // 메타문자. 어떤 문자 하나를 뜻함. 대상 문자열의 문자 갯수만큼 마침표를 입력하면 다 매칭이 됌~
// 대상문자열의 길이가 너무 길거나 알 수 없다면?
/./g // g 플래그를 달면 전체를 대상으로.. 뽑긴 한데 하나씩 분리가 되서 나옴
/.+/ // 앞에있는패턴의 반복을 지시하는 메타문자 앞에 있는 패턴이 끝날때까지 계속 반복해서 끝나는 지점까지 뽑혀나옴.
/A+/ // A문자가 반복되고 공백문자를 만나는 순간 A문자 패턴의 불일치가 발생하여 AA까지만 일치됨
/A+/g
/A+/gi
정규표현식 안에서의 조건문
/A|B/g // OR을 의미. 좌측 혹 우측의 패턴 중 하나와 일치하면 일치
//=
/[AB]/g // 브라켓메타문자 안에 있는 애들은 모든 문자가 or로 작동함
/A+|B+/g // 분해되지않은 문자열을 얻기위해 반복메타문자사용 (+)
// =
/[AB]+/g // 앞의 그룹이 연속되는거. 위에거보다 읽기가 더 편함
/[A-Z]+/g // 알파벳 a부터 z까지 모두 표현한것.
/[A-Za-z]+/g // 알파벳 a부터 z까지 모두 표현한것. intensive 없이 대소문자 불러오기
// $12,000 추출하기
/\$/ // 역슬래시를 이용해서 escape 시키면 일반문자열로 읽음.
/\$[0-9]/g // $ 이후 숫자를 한정하지않기위해 0-9 문자집합 사용
/\$[0-9]+/g // 문자집합을 반복 일치하다가 콤마가 나타나 일치가 중단됌
/\$[0-9,]+/g // 문자집합에 콤마도 추가해서 끝까지 반복일치 시켜서 뽑아냄
// 소수점이 있다면?
/\$[0-9,.]+/g // 문자집합에 마침표 (.) 추가.. or 안 (브라켓) 안에서 마침표는 escape 시키지않고도 인식함
/\d/g // [0-9]를 \d으로 표시하면됌
/\D/g // 역슬래시 소문자 d는 숫자를 의미한다면 역슬래시 대문자 D는 숫자가 아닌 모든문자를 의미.
/\w/g // 역슬래시 소문자 w는 영문자
/\W/g // 역슬래시 대문자 W는 영문자 제외 모든 문자
// http, https 찾기
// 바로 * (아스트레이크)
/https*:/g // 앞의 문자가 없거나 한번이상 나타나는 패턴과 일치시킴
// 즉 s가 없거나 s가 한번이상 나타나는 패턴과 일치시킴 근데 httpss 오타도 일치시켜서 버그~
/https?*:/g // 퀘스천마크를 사용해서 앞에 문자가 없거나 '1번만' 나타나는 패턴만 일치시킴.
// http url 찾기
/https?:\/\//g // 슬래시를 escape 시켜서 문자열로 인식하게함
/https?:\/\/\w+/g // word
/https?:\/\/[^:\/\/s]+/g // 캐럿 (^) 이라는 문자를 쓰면 이외의 not 의미를 가짐. ^ 하고 : 콜론 뒤에 있는것들을 제외하고 나머지 싹다~
// escape 시켜서 \s는 스페이스를 의미함
// 그러나 공백문자가 포함된 잘못된 도메인이 나타날수도!
/https?:\/\/[^:\/\/s]+\.\w+/g // 모든건 마침표하고 com이라던가 단어 하나가 나온다.
/https?:\/\/[^:\/\/s]+\.\w+:\d+/g // 포트있는거만 포함되고 나머진 산출이 안돼는 문제 등장
/https?:\/\/[^:\/\/s]+\.\w+(:\d+)?/g // 숫자있는걸 그룹시켜서 한번만 있거나 없거나 하는 식으로 뽑아냄.