자바스크립트 교재 · 11편 / 26편

문자열 — 템플릿·split·replace

템플릿 리터럴, 자주 쓰는 메서드 10개, 정규식 살짝 맛보기.

기초읽는 시간 6분2026-05-17
JS 문자열의 다양한 메서드 사용 예시가 코드 카드로 정리된 일러스트

문자열은 어디에나 있습니다 — 사용자 입력·API 응답·로그·UI 라벨. 11편은 매일 쓰는 메서드 10개와 백틱(`) 템플릿 리터럴, 그리고 정규식의 첫 한 입을 정리합니다.

템플릿 리터럴 — 백틱이 거의 정답

const name = "준성", age = 39;

// 옛 방식
"안녕, " + name + "! 나이: " + age;

// 백틱 — 변수 보간
`안녕, ${name}! 나이: ${age}`;

// 표현식 OK
`내년에 ${age + 1}살`;

// 여러 줄
`첫 줄
두 번째 줄
${name} 의 인사`;

// 함수도 호출 가능
`총 ${arr.length}개`;

한 줄 권장. 변수 보간이 필요한 모든 곳에 백틱. 변수가 전혀 없으면 홑/쌍 따옴표든 백틱이든 취향. Prettier 같은 포매터가 보간 없는 백틱을 홑따옴표로 자동 변환해주기도 합니다.

자주 쓰는 메서드 10개

메서드용도예시
length길이 (단, 이모지 주의)"abc".length → 3
toUpperCase / toLowerCase대소문자"Hi".toUpperCase() → "HI"
trim / trimStart / trimEnd공백 제거" hi ".trim() → "hi"
includes / startsWith / endsWith포함 검사 (boolean)"hello".includes("ll") → true
indexOf / lastIndexOf위치 (-1 없음)"hello".indexOf("l") → 2
slice(start, end)부분 추출"hello".slice(1, 4) → "ell"
split(sep)배열로 쪼개기"a,b,c".split(",") → ["a","b","c"]
replace / replaceAll치환"aaa".replaceAll("a","b") → "bbb"
repeat(n)반복"-".repeat(5) → "-----"
padStart / padEnd길이 채우기"3".padStart(2, "0") → "03"

실전 패턴 — 자주 만나는 5가지

① 이메일에서 도메인만

const email = "[email protected]";
email.split("@")[1];                  // "gmail.com"
email.slice(email.indexOf("@") + 1);  // 같은 결과

② 카드 번호 마스킹

const card = "1234567812345678";
"*".repeat(12) + card.slice(-4);      // "************5678"

③ 단어 첫 글자 대문자

function capitalize(s) {
  return s.charAt(0).toUpperCase() + s.slice(1);
}
capitalize("hello");                  // "Hello"

④ 슬러그 만들기 (한국어 무시)

const title = "  React 와 Vue ";
title.trim().toLowerCase().replace(/\s+/g, "-");
// "react-와-vue"

⑤ CSV 한 줄 → 객체

const headers = ["id", "name", "email"];
const row = "1,준성,[email protected]";
const obj = Object.fromEntries(
  headers.map((h, i) => [h, row.split(",")[i]])
);
// { id: "1", name: "준성", email: "[email protected]" }

정규식 — 한 입만

// 문자 그대로의 검색은 includes 면 충분
// 정규식은 "패턴" 이 필요할 때

const text = "전화: 010-1234-5678, 010-9999-1111";

// 모든 전화번호 추출
text.match(/\d{3}-\d{4}-\d{4}/g);     // ["010-1234-5678", "010-9999-1111"]

// 이메일 형식 대충 검증
const emailRe = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
emailRe.test("[email protected]");              // true

// 치환에서 정규식 사용
"aaa-bbb-ccc".replace(/-/g, "_");     // "aaa_bbb_ccc"  ← g 플래그로 전부
"aaa bbb  ccc".replace(/\s+/g, " ");  // 연속 공백 1칸으로

// 그룹 캡처
const m = "2026-05-17".match(/^(\d{4})-(\d{2})-(\d{2})$/);
// m[1]="2026", m[2]="05", m[3]="17"

정규식의 한도. 복잡한 정규식은 디버그 지옥. 한 줄로 안 풀리면 여러 단계로 쪼개거나 라이브러리(date-fns·zod) 를 쓰세요. 그리고 사용자 입력 검증은 클라이언트 + 서버 모두에서.

길이의 함정 — 이모지·한글 조합

"안녕".length              // 2 ← OK
"👋".length                // 2 ← !! (surrogate pair)
"가족👨‍👩‍👧".length          // 7 ← !! (ZWJ 합성)

// 실제 시각적 글자 수 (그래핍)
[..."👋"].length           // 1 ← spread 가 코드포인트 단위
Array.from("👋").length    // 1

// 완벽한 그래핍 카운트는 Intl.Segmenter (ES2022+)
const seg = new Intl.Segmenter("ko", { granularity: "grapheme" });
[...seg.segment("가족👨‍👩‍👧")].length   // 3

실전 추천. ASCII·CJK 한국어 정도면 str.length 충분. 이모지·다국어 입력 받는 폼은 [...str].length 또는 Intl.Segmenter. SNS·메신저 메시지 길이 제한이라면 후자가 안전.

12편 — 스코프와 호이스팅

변수가 어디서 살아있는지, 함수/블록/TDZ 의 차이.

📚 쉽게 배우는 자바스크립트 교재
이전: 10편 객체 · 현재: 11편 (기초) · 다음 → 12편 스코프·호이스팅 · 진행: 11/26

© 2026 주나이테크(주) @JUNAITECH