공백이나 쉼표로 JavaScript 문자열을 어떻게 나눌 수 있습니까?


123

내가 시도하면

"my, tags are, in here".split(" ,")

나는 다음을 얻는다

[ 'my, tags are, in here' ]

내가 원하는 반면

['my', 'tags', 'are', 'in', 'here']

4
공백 이나 쉼표 를 의미하지 않습니까?
KaptajnKold

1
당신이 얻는 결과에 대한 설명으로 : 쉼표가 뒤에 오는"my, tags are, in here".split(" ,") 공백 이 구분 기호 인 경우에만 문자열을 분할합니다 . 문자열에 해당 시퀀스가 ​​포함되어 있지 않으므로 분할되지 않습니다. 분할 순서를 바꾸면 각 쉼표와 공백 뒤에 적어도 원래 문자열을 세 부분으로 분할합니다. 다섯 부분을 원하는 경우 아래 답변은 일치 문자열을 공백 또는 쉼표 일치하는 정규식으로 지정합니다 . "my, tags are, in here".split(", ")
Jochem Schulenklopper 2016 년

답변:


233

String.split 정규식을받을 수도 있습니다.

input.split(/[ ,]+/);

이 특정 정규식은 하나 이상의 쉼표 또는 공백 시퀀스에서 분할되므로 예를 들어 여러 연속 공백 또는 쉼표 + 공백 시퀀스가 ​​결과에 빈 요소를 생성하지 않습니다.


22
어때 /,?\s+/?
Bergi

4
@Bergi : 글쎄, 그것은 내가 제안한 것보다 더 엄격하고 (앞에 하나의 쉼표 만 허용됨) OP가 요청한 것보다 더 느슨하다 (모든 공백으로 분할). IMHO 그것은 단순히 더 나쁠 것입니다-입력을 고려하십시오 spaces , before commas.

@Jon : 좋아요, 그것은 OP의 필요에 따라 다릅니다. 나는 주장하지 않을 것이다 :-)
Bergi

11
+1 조금 오래되었지만 왜 공백을 사용하지 않고 사용하는지 알고 \s있습니다. Blob에 줄 바꿈이있을 수 있으며 \s이러한 작업도 처리합니다.
iambriansreed

6
FACEPALM 참고 : 정규식을 따옴표로 묶지 마십시오. 예를 들어 input.split("/[ ,]+/)". 따옴표를 생략하면 ( input.split(//)대신 input.split("//")) 훨씬 더 나은 경험을 할 수 있습니다. 이상한 때문에, 그건 정말 아마에서만 작동 것 자체가 (생성하는 ["input.split(\"", ")\""]).
cod3monk3y 2013

41

사용 제안 .split(/[ ,]+/)은 좋지만 조만간 자연스러운 문장 을 사용 하면 배열에 빈 요소가 생깁니다. 예 : ['foo', '', 'bar'].

유스 케이스에 괜찮다면 괜찮습니다. 그러나 빈 요소를 제거하려면 다음을 수행 할 수 있습니다.

var str = 'whatever your text is...';
str.split(/[ ,]+/).filter(Boolean);

6
그것은 네이티브 객체 암시 적 생성자의 매우 영리한 사용입니다. 내 컴퓨터 키보드는 오늘 아침에 화를 냈습니다.이 주석은 나중에 편집 할 것입니다. 'new Boolean ()'을 호출하는 것과 마찬가지로 false 값입니다. 그러면이 기본 동작으로 모든 일치 항목이 필터링됩니다. Nice one :)
VLostBoy

"자연 문"이 정확히 무엇을 의미합니까? 나는 그것을 흉내낼 수 없었고 이것이 무엇을해야하는지 이해하지 못했습니다.
cregox

@VLostBoy가 설명합니다. Boolean()생성자가 임의의 값에 대해 호출 되면 해당 값을 부울 (true 또는 false)로 캐스팅합니다. 따라서 빈 문자열을 포함하여 잘못된 값은 배열에서 필터링됩니다.
jonschlinkert

1
btw, 당신은 다른 유사한 재미있는 것들을 위해 암시 적 생성자를 사용할 수 있습니다.[1, 2, 3].map(String)
jonschlinkert

2
"foo, bar,,foobar,".split(/[\s,]+/)["foo", "bar", "foobar", ""](마지막에 매달려있는 쉼표 때문에) 반환합니다 . 감사합니다!
Rafał Cieślak

37

임의의 길이의 공백을 포착하기 위해 정규식을 사용할 수 있으며 다음과 같습니다.

var text = "hoi how     are          you";
var arr = text.split(/\s+/);

console.log(arr) // will result : ["hoi", "how", "are", "you"]

console.log(arr[2]) // will result : "are" 

를 사용할 때 선행 / 후행 공백에주의하십시오 /\s+/. 예 : 'a b c '.split(/\s+/) === [ 'a', 'b', 'c', '' ]. 당신 .trim()이 먼저 현 이라면 잘 될 것입니다.
Jordan Dodson 19

12
"my, tags are, in here".split(/[ ,]+/)

결과는 다음과 같습니다.

["my", "tags", "are", "in", "here"]

4

input.split(/\s*[\s,]\s*/)

\s*0 개 이상의 공백 문자와 일치합니다 (공백뿐 아니라 탭 및 줄 바꿈도 포함).

... [\s,]하나의 공백 문자 또는 하나의 쉼표와 일치

같은 입력에서 빈 요소를 피 "foo,bar,,foobar"하려면 트릭을 수행합니다.

input.split(/(\s*,?\s*)+/)

+하나 이상의 선행 문자 또는 그룹과 일치합니다.

편집하다:

?0 개 또는 1 개의 쉼표와 일치하는 쉼표 뒤에 추가 됩니다.

편집 2 :

편집 1이 실수로 밝혀졌습니다. 고쳤다. 이제식이 일치하는 항목을 찾으려면 적어도 하나의 쉼표 또는 하나의 공백이 있어야합니다.


아니요. 그 좋지 않다. 이것은 출력 : [ "나의", "여기", "태그입니다"]
gabitzish

그것은 각 캐릭터에서 분리되는 것 같습니다.
Marco

@Marco 죄송합니다. 아마도 마지막 편집을하기 전에 테스트 했어야했을 것입니다. 나는 지금 가지고 있으며 이번에는 실제로 작동합니다.
KaptajnKold 2013 년

흠,이게 받아 들여진 대답보다 어떻게 낫습니까? "foo,bar,foobar".split(/[ ,]+/)반환 ["foo", "bar", "foobar"]합니다.
Rafał Cieślak

1
@KaptajnKold 오, 인식하지 못했습니다. 답변 해 주셔서 감사합니다!
Rafał Cieślak

2

쉼표와 같은 추가 문자를 고려할 때 (내 경우에는 각 토큰이 따옴표로 입력 될 수 있음) string.replace ()를 수행하여 다른 구분 기호를 공백으로 변경 한 다음 공백으로 분할합니다.


1
str_variable.replace(/[,'"]+/gi, ' ').split(' ')
qräbnö
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.