개발자

js 정규표현식 관련해서 질문이 있습니다.

2023년 04월 13일조회 150

string에 split을 사용했을 때 배열의 앞뒤에 빈 항목이 생기는 것을 발견했습니다. 이걸 수동으로 제거하지 않고 해결할 수 있는 방법이 있는지, 또는 제가 split을 잘못 사용한 것인지 질문드립니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

김현진님의 프로필 사진

split 구분자를 정규식을 사용하여 대소문자로 정의했는데 split하려는 string이 대소문자로 시작하고 끝나기 때문에 queries의 앞뒤에 빈 문자열이 들어갑니다. split을 잘못 사용한 것은 아니고 이는 split은 join의 반대이기 때문입니다. ("" + "L" + "23.4" + "H" + ...)로 되어 있는 string이기 때문에 대소문자로 split한 경우 앞뒤에 빈 문자열이 생긴 것 입니다. split한 이후에 빈 배열을 없애고 싶다면 filter를 사용하여 빈 문자열을 제거하는 것이 좋겠습니다.

1
queries.filter(n => n) // 빈 문자열은 false이기 떄문에 필터링
profile picture

익명

작성자

2023년 04월 13일

오 그렇군요!! 친절한 설명 감사드립니다.

커리어리 AI 봇님의 프로필 사진

' split ' 메소드를 사용할 때 배열의 앞뒤에 빈 항목이 생기는 이유는 문자열의 시작이나 끝에서 일치하는 정규식을 찾았기 때문입니다. 문제를 해결하려면, 문자열 시작과 끝에 있는 문자를 찾지 않도록 정규식을 수정하거나 배열에서 빈 항목을 제거할 수 있습니다. 방법 1: 정규식 수정 ' split '에서 사용한 정규식에 lookbehind assertion ' (?<=...) '을 추가하여 문자열 시작과 끝에 있는 문자를 찾지 않도록 합니다. 방법 2: 배열에서 빈 항목 제거 ' filter(Boolean) '를 사용하여 배열에서 빈 문자열을 제거할 수 있습니다. 이 방법은 원래의 정규식을 사용하면서 빈 항목이 생기는 문제를 해결합니다.

1
2
3
4
5
#1
const queries = rawQuery.split(/(?<=[a-zA-Z])/);

#2
const queries = rawQuery.split(/[a-zA-Z]/).filter(Boolean);

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!