web-dev-qa-db-ja.com

複数のスペースを単一のスペースに置き換えるための正規表現

次のような文字列を考えます。

「犬は長い尾を持っていて、それは赤です!」

スペースを最大1スペースまでに抑えるために使用できるjQueryやJavaScriptのマジックはどのようなものですか?

ゴール:

「犬は長い尾を持っていて、それは赤です!」
385
AnApprentice

タブや改行などもカバーしたい場合は、\s\s+' 'に置き換えます。

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

あなたが本当にスペースだけをカバーしたいのであれば(そしてタブや改行などをカバーしたくないのなら)、そうしてください:

string = string.replace(/  +/g, ' ');
734
BalusC

あなたはパフォーマンスに興味があるようだから、私はこれらをfirebugでプロファイリングした。これが私が得た結果です:

str.replace( /  +/g, ' ' )       ->  380ms
str.replace( /\s\s+/g, ' ' )     ->  390ms
str.replace( / {2,}/g, ' ' )     ->  470ms
str.replace( / +/g, ' ' )        ->  790ms
str.replace( / +(?= )/g, ' ')    -> 3250ms

これはFirefox上で、100,000文字列の置換を実行しています。

パフォーマンスが問題になると思われる場合は、firebugを使って独自のプロファイリングテストを行うことをお勧めします。人間は、プログラムのボトルネックがどこにあるのかを予測するのが苦手です。

(また、IE 8の開発者ツールバーにもプロファイラーが組み込まれていることに注意してください - IEでパフォーマンスがどのようになっているかをチェックする価値があるかもしれません。

139
Edward Loper
var str = "The      dog        has a long tail,      and it is RED!";
str = str.replace(/ {2,}/g,' ');

編集: すべての種類の空白文字を置き換えたい場合は、最も効率的な方法は次のようになります。

str = str.replace(/\s{2,}/g,' ');
38
watain

これは1つの解決策ですが、 all space文字をターゲットにします。

"The      dog        has a long tail,      and it is RED!".replace(/\s\s+/g, ' ')

"The dog has a long tail, and it is RED!"

編集 :1つ以上のスペースが後に続くスペースをターゲットにするので、これはおそらくより良いです。

"The      dog        has a long tail,      and it is RED!".replace(/  +/g, ' ')

"The dog has a long tail, and it is RED!"

代替方法:

"The      dog        has a long tail,      and it is RED!".replace(/ {2,}/g, ' ')
"The dog has a long tail, and it is RED!"

私は/\s+/を単独では使いませんでした。なぜならそれは1文字にまたがるスペースを複数回置き換えるためで、必要以上にターゲットを絞っているため効率が悪くなる可能性があるためです。

私はこれらのどれも深くテストしませんでしたのでバグがあるならlmk。

また、文字列置換をするつもりなら、変数/プロパティをそれ自身の置換に再割り当てすることを忘れないでください。例えば:

var string = 'foo'
string = string.replace('foo', '')

JQuery.prototype.textを使う:

var el = $('span:eq(0)');
el.text( el.text().replace(/\d+/, '') )
16
meder omuraliev

私はこのメソッドを持っています、私はそれをより良い名前の欠如のためにDerpメソッドと呼びます。

while (str.indexOf("  ") !== -1) {
    str = str.replace(/  /g, " ");
}

JSPerfで実行すると、いくつかの驚くべき結果が得られます。

13
Nenotlep

より堅牢な方法:これは そして 最初のスペースと最後のスペースがあればそれらを削除するのを引き受ける。例えば:

// NOTE the possible initial and trailing spaces
var str = "  The dog      has a long   tail, and it     is RED!  "

str = str.replace(/^\s+|\s+$|\s+(?=\s)/g, "");

// str -> "The dog has a long tail, and it is RED !"

あなたの例はそれらのスペースを持っていませんでしたが、それらも非常に一般的なシナリオであり、そして受け入れられた答えは以下のようにそれらを単一のスペースにトリミングすることでした。

12
Ethan

より堅牢:

関数トリム(Word)
 {
 Word = Word.replace(/ [^\x21  - \x7E] +/g、 ''); //印刷されない文字をスペースに変更する
 Word.replace(/ ^\s + |\s + $/g、 ''); //前後のスペースを削除する
} 
10
Chris

私は提案します

string = string.replace(/ +/g," ");

スペースだけ
または

string = string.replace(/(\s)+/g,"$1");

複数のリターンを単一のリターンに変換するためにも。

8
Leonard Meagher

これは、replaceを使用したくない場合の代替ソリューションです(replace javascriptを使用せずにストリング内のスペースを置き換える)。

var str="The dog      has a long   tail, and it     is RED!";
var rule=/\s{1,}/g;
str = str.split(rule).join(" "); 
document.write(str);
6
imos

私はパーティーに遅れていることを知っています、しかし私はニースの解決策を発見しました。

ここにあります:

var myStr = myStr.replace(/[ ][ ]*/g, ' ');
5
ToXic73

初心者のための包括的な暗号化されていない答え。

これは私のような、動作しない一部の人たちによって書かれたスクリプトをテストするすべての人のためのものです。

次の3つの例は、次の3つのWebサイトで特殊文字と余分なスペースを削除するために実行した手順です(すべて完全に機能します){1。 EtaVisa.com 2. EtaStatus.com 3. Tikun.com}これらは完全に機能することがわかりました。

私達は一度に50以上のものと一緒にこれらを一緒にチェーンしました、そして、何の問題もありません。

//これにより特殊文字+ 0-9が削除され、文字のみが許可されます(大文字と小文字の区別)

function NoDoublesPls1()
{
var str=document.getElementById("NoDoubles1");
var regex=/[^a-z]/gi;
str.value=str.value.replace(regex ,"");
}

//これにより特殊文字が削除され、文字(大文字と小文字)および0-9 ANDスペースのみが許可されます

function NoDoublesPls2()
{
var str=document.getElementById("NoDoubles2");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"");
}

//これにより特殊文字が削除され、大文字と小文字の小文字と0-9のANDスペースのみが使用可能になります。一重引用符を使用した、それは動作しませんでした。

function NoDoublesPls3()
{    var str=document.getElementById("NoDoubles3");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " ");
}

:: NEXT :: #3をa .jsとして保存//私はNoDoubles.jsという名前を付けました。

:: NEXT :: あなたのページにあなたのJSを含める

 <script language="JavaScript" src="js/NoDoubles.js"></script>

これをあなたのフォームフィールドに含めてください::

<INPUT type="text" name="Name"
     onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>

それはこのように見えるように

<INPUT type="text" name="Name" onKeyUp="NoDoublesPls3()" onKeyDown="NoDoublesPls3()" id="NoDoubles3"/>

これは特殊文字を削除し、単一のスペースを考慮して余分なスペースを削除します。

5
PatFoster

また可能性:

str.replace( /\s+/g, ' ' )
4
rfunduk

Jqueryは基本的にこの "FOo Bar"のようなものを "FOo Bar"に変えるtrim()関数を持っています。

var string = "  My     String with  Multiple lines    ";
string.trim(); // output "My String with Multiple lines"

文字列の先頭と末尾の空白も自動的に削除されるため、はるかに便利です。正規表現は必要ありません。

1
Eryk Wróbel

Sed systemコマンドを使用して説明した次の正規表現を使用できます。同様の正規表現は他の言語やプラットフォームでも使用できます。

いくつかのファイルにテキストを追加しますtest

manjeet-laptop:Desktop manjeet$ cat test
"The dog      has a long   tail, and it     is RED!"

次の正規表現を使って、すべての空白を単一の空白に置き換えることができます。

manjeet-laptop:Desktop manjeet$ sed 's/ \{1,\}/ /g' test
"The dog has a long tail, and it is RED!"

これが目的を果たすことを願っています

0
minhas23

置換が使用されていない場合、string = string.split(/\W + /);

0
Lin

これを試して、複数のスペースを単一のスペースに置き換えます。

<script type="text/javascript">
    var myStr = "The dog      has a long   tail, and it     is RED!";
    alert(myStr);  // Output 'The dog      has a long   tail, and it     is RED!'

    var newStr = myStr.replace(/  +/g, ' ');
    alert(newStr);  // Output 'The dog has a long tail, and it is RED!'
</script>

続きを読む@ 複数のスペースを単一のスペースに置き換える

0
jonathan klevin

より細かく制御するには、replaceコールバックを使用して値を処理します。

value = "tags:HUNT  tags:HUNT         tags:HUNT  tags:HUNT"
value.replace(new RegExp(`(?:\\s+)(?:tags)`, 'g'), $1 => ` ${$1.trim()}`)
//"tags:HUNT tags:HUNT tags:HUNT tags:HUNT"
0
jackotonye
var text = `xxx  df dfvdfv  df    
                     dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');

結果:

"xxx df dfvdfv df dfv"
0
Toolkit

このスクリプトは、単語とトリムの間にある空白(複数の空白、タブ、リターンなど)を削除します。

// Trims & replaces any wihtespacing to single space between words
String.prototype.clearExtraSpace = function(){
  var _trimLeft  = /^\s+/,
      _trimRight = /\s+$/,
      _multiple  = /\s+/g;

  return this.replace(_trimLeft, '').replace(_trimRight, '').replace(_multiple, ' ');
};
0
Oriol
var string = "The dog      has a long   tail, and it     is RED!";
var replaced = string.replace(/ +/g, " ");

あるいはタブも置き換えたい場合は:

var replaced = string.replace(/\s+/g, " ");
0
Brian Campbell
var myregexp = new RegExp(/ {2,}/g);

str = str.replace(myregexp,' ');
0
marvin