JavaScript를 사용하여 문자열에서 공백을 제거하는 방법은 무엇입니까?


552

문자열에서 공백을 제거하는 방법? 예를 들어 :

입력:

'/var/www/site/Brand new document.docx'

산출:

'/var/www/site/Brandnewdocument.docx'

내 솔루션" ahm ed ".split('').filter(e => e.trim().length).join('')
UA_

답변:


1224

이?

str = str.replace(/\s/g, '');

var str = '/var/www/site/Brand new document.docx';

document.write( str.replace(/\s/g, '') );


업데이트 : 바탕으로 이 질문 이 :

str = str.replace(/\s+/g, '');

더 나은 솔루션입니다. 결과는 같지만 더 빠릅니다.

정규식

\s"공백"에 대한 정규식이며 " g글로벌"플래그이며 모두 일치 \s(공백)를 의미 합니다.

에 대한 좋은 설명은 +찾을 수 있습니다 여기에 .

참고로 작은 따옴표 사이의 내용을 원하는 것으로 바꿀 수 있으므로 공백을 다른 문자열로 바꿀 수 있습니다.


@ Garav 나는 SO에 대해 비슷한 대답을 찾았으며 .replace(/\s+/g, '')더 자주 봅니다. 저의 대답과는 다른 점이 있습니까?
Šime Vidas

이 경우 차이가 없습니다. 그러나 +는 최소한 한 번만 발견하는 데 사용됩니다.
Gaurav

1
어리석은, 나는 효과가 있다는 인상을 받았다 .replace(' ',''). 매우 감사!
Andy Mercer

3
(SIME 자신의 편집에 연결) 포함하는 원래의 대답은 +사람이 / 그녀도 그를 신용하고자하는 경우 60 표를 가지고 stackoverflow.com/a/5964427/4258817
쥐의

2
.replace('/\s+/g', '')리터럴 문자열을 찾으려고하기 때문에 실수로 정규 표현식을 인용하지 않도록주의하십시오 . 이것은 나를 넘어 ... 전
RTF

75

var a = b = " /var/www/site/Brand new   document.docx ";

console.log( a.split(' ').join('') );
console.log( b.replace( /\s/g, '') ); 

이 작업을 수행하는 두 가지 방법!


4
split ()과 join ()이 마음에 들었습니다.
Eric Milliot-Martinez

2
split ( '') 및 join은 \ n, \ t 공백 문자를 제거하지 않으며 다른 해결 방법은 a.split ( ''). map (c => c.trim ()). join ( '')
rab

36

가장 빠르고 가장 빠른 :str.replace(/ /g, '');


기준:

내 결과-(2018.07.13) Chrome 67.0.3396 (64-bit), Safari 11.0.3 (13604.5.6), Firefox 59.0.2 (64-bit)의 MacOs High Sierra 10.13.3 :

단축 문자열

OP 질문의 예와 유사한 짧은 문자열

여기에 이미지 설명을 입력하십시오

모든 브라우저에서 가장 빠른 솔루션은 / /g(regexp1a)-Chrome 17.7M (작동 / 초), Safari 10.1M, Firefox 8.8M입니다. 모든 브라우저에서 가장 느린 것은 split-join솔루션 이었습니다 . 변경 \s추가하거나 +또는 i처리 아래로 정규 표현식을 느려집니다.

긴 문자열

~ 3 개의 밀리언 문자 결과에 대한 문자열의 경우 :

  • regexp1a : Safari 50.14 ops / sec, Firefox 18.57, Chrome 8.95
  • regexp2b : Safari 38.39, Firefox 19.45, Chrome 9.26
  • split-join : Firefox 26.41, Safari 23.10, Chrome 7.98,

https://jsperf.com/remove-string-spaces/1 컴퓨터에서 실행할 수 있습니다


1
흥미롭게도 split-join 방법은 Firefox 73에서 가장 빠르며 regexp1a는 53 % 느립니다.
hackel

25

@rsplak 답변에 따르면 실제로는 split / join 방식을 사용하는 것이 regexp를 사용하는 것보다 빠릅니다. 성능 테스트 사례보기

그래서

var result = text.split(' ').join('')

보다 빠르게 작동

var result = text.replace(/\s+/g, '')

작은 텍스트의 경우 이는 관련이 없지만 텍스트 분석기에서, 특히 사용자와 상호 작용할 때와 같이 시간이 중요한 경우에 중요합니다.


반면에 \s+더 넓은 공간 문자를 처리합니다. with \n와 중에서도 문자와 \t일치하므로를 사용하여 텍스트를 가져올 때 켜 집니다.\u00a0 textDomNode.nodeValue

따라서 여기에서 결론은 다음과 같이 이루어질 수 있다고 생각합니다. 공백 만 교체 해야하는 ' '경우 split / join을 사용하십시오. 심볼 클래스 의 다른 심볼이있을 수있는 경우 -사용replace(/\s+/g, '')


1
그것은별로 아닙니다 way faster . 테스트를 실행하고 그건 단지 내 파이어 폭스 (61)에 2.19 % 빠른
수직 동기화


2
  var output = '/var/www/site/Brand new document.docx'.replace(/ /g, ""); 
    or
  var output = '/var/www/site/Brand new document.docx'.replace(/ /gi,"");

참고 : 공백을 제거하기 위해 'g'또는 'gi'를 사용하더라도 둘 다 동일하게 작동합니다.

replace 함수에서 'g'를 사용하면 정확히 일치하는지 확인합니다. 그러나 'gi'를 사용하면 대소 문자 구분을 무시합니다.

참고로 여기를 클릭하십시오 .


0

정규식 + 바꾸기 ()

정규 표현식이 느릴 수 있지만 많은 사용 사례에서 개발자는 한 번에 몇 개의 문자열 만 조작하므로 속도를 고려하지 않는 것이 좋습니다. / /가 / \ s /보다 빠르더라도 '\ s'가 있으면 다른 개발자에게 어떤 일이 더 명확하게 진행되는지 설명 할 수 있습니다.

let string = '/var/www/site/Brand new document.docx';
let path = string.replace(/\s/g, '');
// path => '/var/www/site/Brandnewdocument.docx'

Split () + Join ()

Split + Join을 사용하면 문자열을 추가로 체인으로 조작 할 수 있습니다.

let string = '/var/www/site/Brand new document.docx';
let path => string.split('').map(char => /(\s|\.)/.test(char) ? '/' : char).join('');
// "/var/www/site/Brand/new/document/docx";
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.