JavaScript文字列で複数の空白を単一の空白に置き換える


191

余分な空白を含む文字列がありますが、空白が複数ある場合は必ず1つだけにしてください。

誰でも?私はグーグルを検索してみましたが、何もうまくいきませんでした。

ありがとう


2
末尾/先頭、またはテキストのどこかから重複する空白を削除しますか?
ninjagecko

回答:


371

このようなもの:

var s = "  a  b     c  ";

console.log(
  s.replace(/\s+/g, ' ')
)


31
@Me質問を注意深くお読みください:「空白が1つ以上ある場合は常に、1つだけにしてください」。
bjornd

5
分かりませんか?複数の空白文字を1つの空白文字に置き換えます。(望ましい結果)
戦争

4
@CiaranGこれは通常の表現です
ポメロイ

1
@Wardy、閉じる:-)。これは、1つ以上のORを1つのスペースに置き換えます(実際には、望ましい結果です)。
greenoldman 2015年

1
1つ以上の空白を同じ種類の空白で置き換えたい場合はどうなりますか?(例:スペースが2つ以上のスペースと、改行が3つある改行など)改行とスペースの両方がある場合は、改行で置き換える必要があります。スペースとタブの両方がある場合は、スペースで置き換える必要があります。スペース
トム・

61

次のように、Stringを拡張して、これらの動作をメソッドとして実装できます。

String.prototype.killWhiteSpace = function() {
    return this.replace(/\s/g, '');
};

String.prototype.reduceWhiteSpace = function() {
    return this.replace(/\s+/g, ' ');
};

これにより、次のエレガントなフォームを使用して、必要な文字列を生成できます。

"Get rid of my whitespaces.".killWhiteSpace();
"Get rid of my extra        whitespaces".reduceWhiteSpace();

14
標準オブジェクトのプロトタイプを拡張することは、本当に物議を醸すパターンです。このような基本的な質問にはお勧めしません。
ビョルンド

@XavierJohnスティングではなく、R付きの文字列です。
LasagnaAndroid 2014

20

replace関数で正規表現を使用すると、うまくいきます。

string.replace(/\s/g, "")

この解決策は問題ごとに間違っています。あなたはそれを掲示なぜ、私は本当によりよい解決策が掲載された2日後に不思議...
セバスチャンマッハ

その時、私はこのコードだけが私のために働いたと思います。それを確認するために戻ることはできません。私は明らかに最初に最善の解決策を試したでしょう。また、Chromeコンソールで確認すると、両方のソリューションが機能しているように見えました。しかし興味深いことに、結果をこのコメントボックスにコピーすると、私のソリューションが複数の空白に対して機能しないことがわかりました。多分あなたは私が理由を理解するのを助けることができます。私はそれがクロームエラーだと思いますか?コードをChromeコンソールで実行してみてください。
Roger Gajraj

13

これは正規表現以外のソリューションです(楽しみのためだけに):

var s = ' a   b   word word. word, wordword word   ';

// with ES5:
s = s.split(' ').filter(function(n){ return n != '' }).join(' ');
console.log(s); // "a b word word. word, wordword word"

// or ES6:
s = s.split(' ').filter(n => n).join(' '); 
console.log(s); // "a b word word. word, wordword word"

文字列を空白文字で分割し、すべての空の配列項目(1つ以上のスペースであったもの)を配列から削除し、すべての単語を文字列に結合し、間に1つの空白文字を入れます。


12

私はあなたが文字列の最初と/または最後からスペースを取り除くことを望んでいると思います(すべてのスペースを削除するのではなく?

その場合は、次のような正規表現が必要です。

mystring = mystring.replace(/(^\s+|\s+$)/g,' ');

これにより、文字列の最初または最後からすべてのスペースが削除されます。末尾からスペースを削除するだけの場合、正規表現は次のようになります。

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

お役に立てば幸いです。


4
私はあなたの正規表現@Spudleyの単純さが好きですが、あなたのコードは最初と最後の空白のランを単一のスペース文字で置き換えませんか?目的は、両端の空白を完全に削除することだと思いました。その場合、置換文字列は''代わりにするあり' 'ます。
ランドールクック

8

jQuery.trim()はうまく機能します。

http://api.jquery.com/jQuery.trim/


14
ただし、これによってすべての空白が削除されるわけではありません。ドキュメントの引用:「文字列の最初と最後から空白削除します。」
Jonik

6

私は主題についてネクロマンシーをすべきではないことを知っていますが、質問の詳細を考えると、私は通常、それを次のように拡張します:

  • 文字列内の空白の複数の出現を単一のスペースに置き換えたい
  • ...そして...文字列の先頭または末尾に空白を入れたくない(トリム)

このために、私は次のようなコードを使用します(コードを少し読みやすくするために、最初の正規表現の括弧はそこにあります...正規表現に慣れていない限り、正規表現は苦痛になる可能性があります)。

s = s.replace(/^(\s*)|(\s*)$/g, '').replace(/\s+/g, ' ');

これが機能する理由は、String-objectのメソッドが(jQueryや他のライブラリと同様に)別のメソッドを呼び出すことができる文字列オブジェクトを返すためです。単一のオブジェクトで複数のメソッドを続けて実行したい場合は、コードをよりコンパクトにする方法。


「ready for use」の例の+1 ..自分で投稿する予定
でした

まさに私が探していたもの、素晴らしい!
robertp 2013年


2

これを試して。

var string = "         string             1";
string = string.trim().replace(/\s+/g, ' ');

結果は

string 1

ここで起こったことは、最初にを使用して外側のスペースをtrim()トリムし、次にを使用して内側のスペースをトリムすること.replace(/\s+/g, ' ')です。


0

ユーザーが名前に空白を入れることを制限したい場合は、ifステートメントを作成して条件を指定するだけです。私がしたように:

$j('#fragment_key').bind({
    keypress: function(e){
        var key = e.keyCode;
    var character = String.fromCharCode(key); 
    if(character.match( /[' ']/)) {
        alert("Blank space is not allowed in the Name");
        return false;
        }
    }
});
  • JQuery関数を作成します。
  • これはキーを押すイベントです。
  • 変数を初期化します。
  • キャラクターにマッチする条件を与える
  • 一致した条件のアラートメッセージを表示します。

0

これはどう?

"my test string \t\t with crazy stuff is cool ".replace(/\s{2,9999}|\t/g, ' ')

出力 "my test string with crazy stuff is cool "

これもタブを取り除きます


タブはすでにでカバーされてい\sます。不必要に複雑な正規表現/\s+/g
Anders Rabo Thorbeck
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.