web-dev-qa-db-ja.com

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

余分な空白を含む文字列があります。空白が複数ある場合はその都度空白にしてください。

誰でも?私はグーグルを検索しようとしました、しかし何も私のために働きませんでした。

ありがとう

184
eve

このようなもの:

var s = "  a  b     c  ";

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

次のように、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();
61
gui pn

replace関数と一緒に正規表現を使うとうまくいく。

string.replace(/\s/g, "")
20
Roger Gajraj

allスペースを削除するのではなく)文字列の先頭または末尾(あるいはその両方)からスペースを削除するとします。

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

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

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

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

それが役立つことを願っています。

12
Spudley

これは非正規表現の解決策です(ただの楽しみのために):

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
vsync

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

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

8
chug2k

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

  • 文字列内の複数の空白を単一の空白に置き換えたい
  • ... and ...文字列の先頭または末尾に空白を入れたくない(trim)

このために、私は次のようなコードを使います(最初の正規表現の括弧はコードをもう少し読みやすくするためにあります。

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

これが機能する理由は、Stringオブジェクトのメソッドが別のメソッドを呼び出すことができる文字列オブジェクトを返すためです(jQueryや他のライブラリと同じように)。 1つのオブジェクトに対して複数のメソッドを連続して実行したい場合は、はるかにコンパクトなコーディング方法です。

7
Markku Uttula

var x = "テストテスト" .split( "").join( "");アラート(x);

これはどう?

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

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

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

1
user3413723

ユーザーが名前に空白を入れることを制限したい場合は、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
Abhijit BIswas

これを試して。

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

結果は

string 1

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

0
Richard Vergis