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です。これは、すべてに一致することを意味します(空白)。

以下のための偉大な説明を+見つけることができるここに

補足として、一重引用符の間のコンテンツを必要なものに置き換えることができるため、空白を他の文字列に置き換えることができます。


@Gaurav SOで同様の回答を検索しましたが、.replace(/\s+/g, '')より頻繁に表示されます。それと私の答えには違いがありますか?
–ŠimeVidas、2011

この場合、違いはありません。ただし、+は少なくとも1回の出現で検索するために使用されます。
Gaurav、

1
ばかげて、私は.replace(' ','')うまくいく印象を受けました。とても有難い!
Andy Mercer

3
(サイムは彼の編集中にリンクされている)を含むオリジナルの答えは+、誰もがあまりにも彼/彼女を信用したい場合のみ、60票を持っているstackoverflow.com/a/5964427/4258817
mouseYの

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, '') ); 

これを行うには2つの方法があります。


4
私はsplit()とjoin()が好きでした。
Eric Milliot-Martinez 2016

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ビット)、Safari 11.0.3(13604.5.6)、Firefox 59.0.2(64ビット)上のMacOs High Sierra 10.13.3):

SHORT文字列

OP質問の例に似た短い文字列

ここに画像の説明を入力してください

すべてのブラウザでの最速のソリューションは/ /g(regexp1a)-Chrome 17.7M(操作/秒)、Safari 10.1M、Firefox 8.8Mです。すべてのブラウザで最も遅いのがsplit-join解決策でした。変更する\sか、追加し+たりi、処理が遅くなるダウン正規表現に。

長い文字列

文字列の場合、約300万の文字の結果は次のとおりです。

  • 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
興味深いことに、Firefox 73では、split-joinメソッドが私にとって最速になり、続いてregexp1aが53%遅くなっています。
ハッケル

25

@rsplakの回答に従ってください。実際には、split / joinを使用する方がregexpを使用するよりも高速です。パフォーマンステストケースを見る

そう

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

よりも速く動作します

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

小さなテキストではこれは重要ではありませんが、テキストアナラ​​イザなどで時間が重要な場合、特にユーザーとのやり取りでは重要です。


一方、\s+さまざまなスペース文字を処理します。中\n\t、それはまた、一致した\u00a0文字を、そしてそれは何である 使用してテキストを取得するとき、中になっていますtextDomNode.nodeValue

だからここでの結論は次のようにできると思います:スペース を置き換えるだけでよい場合は' '、split / joinを使用してください。シンボルクラスの異なるシンボルが存在する可能性がある場合-使用replace(/\s+/g, '')


1
それはほとんどありません way faster。テストを実行し、それがだだけで 2.19パーセント速く、私のFirefox 61に
VSYNC


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

正規表現+ Replace()

正規表現は遅くなる可能性がありますが、多くの場合、開発者は一度に少数の文字列を操作するだけなので、速度を考慮する必要はありません。/ /は/ \ 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.