728x90

 

JavaScipt에서 문자열을 특정 문자를 구분할 때 split() 함수를 자주 사용합니다.

 

var str = 'HTML,CSS,JavaScript';
var words = str.split(',');

console.log(words) // 결과 : ['HTML', 'CSS', 'JavaScript']

 

그러나 구분자가 하나가 아니라면 ▶세 개의 구분자 포스팅에서 나온 문제처럼 코드가 길어집니다.

 

그러면 구분자를 여러 개를 사용하고 싶을 때는 어떻게 해야 할까요?

 

문자열을 여러 조건으로 나누고 싶을 때는 크게 2가지가 있습니다.

 

1. 정규식

let arr = ["Park:M" , "Choi:F" , "Son:M"];

let answer = arr.toString().split(/[,:]/);

console.log(answer);  // 결과 : ['Park', 'M', 'Choi', 'F', 'Son', 'M']

 

위 코드처럼 정규식을 활용한다면 구분자가 여러 개여도 구분할 수 있습니다.

 

기호 의미
| OR
[] 괄호안의 문자들 중 하나
[^문자] 괄호안의 문자를 제외한 것
^문자열 특정 문자열로 시작(괄호 없음 주의!)
문자열$ 특정 문자열로 끝남
() 그룹 검색 및 분류(match메서드에서 그룹별로 묶어줌)
(?: 패턴) 그룹 검색(분류X)
\b 단어의 처음/끝
\B 단어의 처음/끝이 아님

 

 

 

2. split() + join()

split()과 join()을 반복적으로 사용하면 됩니다.

 

문자열. split() : 소괄호 내의 기호로 문자열을 나누어 배열로 만듭니다.

 

배열. join() : 소괄호 내의 기호로 배열의 각 원소를 이어 붙여 문자열로 만듭니다.

 

let str = "A!B@C$D";

console.log(str); // 결과 : 'A!B@C$D'

let str1 = str.split('!').join(','); 

console.log(str1);// 결과 : 'A,B@C$D'

let str2 = str1.split('@').join(','); 
console.log(str2);// 결과 : 'A,B,C$D'


let str3 = str2.split('$').join(',');
console.log(str3);// 결과 : 'A,B,C,D'

 

다른 활용

function solution(myStr) {
    const tmp1 = myStr.split("a").join("b")
    const tmp2 = tmp1.split("b").join("c")
    const tmp3 = tmp2.split("c").filter(x => x)
    if (tmp3.length === 0) return ["EMPTY"]
    return tmp3
}

 

위 코드는  ▶세 개의 구분자 포스팅에서 나온 문제입니다.

 

[프로그래머스] 세 개의 구분자 (JavaScript)

▶정규 표현식 & ▶filter 을 활용한 간단한 문제가 있어 정리해보고자 합니다. 문제설명 임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다. 예를 들어

pixx.tistory.com

 

구분자를 여러 개를 사용해서 해당 구분자를 제외한 문자를 얻으려면 위와 같이 활용하면 됩니다.

 

해당 포스팅에서도 설명했듯이 join() 함수의 인자를 연속해서 넣어준다면 a → b → c 순으로 변하고 filter() 함수를 사용하여 빈값이 아닌 값만 저장해 주면 됩니다.