次のような文字列を考えます。
「犬は長い尾を持っていて、それは赤です!」
スペースを最大1スペースまでに抑えるために使用できるjQueryやJavaScriptのマジックはどのようなものですか?
ゴール:
「犬は長い尾を持っていて、それは赤です!」
タブや改行などもカバーしたい場合は、\s\s+
を' '
に置き換えます。
string = string.replace(/\s\s+/g, ' ');
あなたが本当にスペースだけをカバーしたいのであれば(そしてタブや改行などをカバーしたくないのなら)、そうしてください:
string = string.replace(/ +/g, ' ');
あなたはパフォーマンスに興味があるようだから、私はこれらを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でパフォーマンスがどのようになっているかをチェックする価値があるかもしれません。
var str = "The dog has a long tail, and it is RED!";
str = str.replace(/ {2,}/g,' ');
編集: すべての種類の空白文字を置き換えたい場合は、最も効率的な方法は次のようになります。
str = str.replace(/\s{2,}/g,' ');
これは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+/, '') )
私はこのメソッドを持っています、私はそれをより良い名前の欠如のためにDerpメソッドと呼びます。
while (str.indexOf(" ") !== -1) {
str = str.replace(/ /g, " ");
}
より堅牢な方法:これは そして 最初のスペースと最後のスペースがあればそれらを削除するのを引き受ける。例えば:
// 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 !"
あなたの例はそれらのスペースを持っていませんでしたが、それらも非常に一般的なシナリオであり、そして受け入れられた答えは以下のようにそれらを単一のスペースにトリミングすることでした。
より堅牢:
関数トリム(Word) { Word = Word.replace(/ [^\x21 - \x7E] +/g、 ''); //印刷されない文字をスペースに変更する Word.replace(/ ^\s + |\s + $/g、 ''); //前後のスペースを削除する }
私は提案します
string = string.replace(/ +/g," ");
スペースだけ
または
string = string.replace(/(\s)+/g,"$1");
複数のリターンを単一のリターンに変換するためにも。
これは、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);
私はパーティーに遅れていることを知っています、しかし私はニースの解決策を発見しました。
ここにあります:
var myStr = myStr.replace(/[ ][ ]*/g, ' ');
初心者のための包括的な暗号化されていない答え。
これは私のような、動作しない一部の人たちによって書かれたスクリプトをテストするすべての人のためのものです。
次の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"/>
これは特殊文字を削除し、単一のスペースを考慮して余分なスペースを削除します。
また可能性:
str.replace( /\s+/g, ' ' )
Jqueryは基本的にこの "FOo Bar"のようなものを "FOo Bar"に変えるtrim()関数を持っています。
var string = " My String with Multiple lines ";
string.trim(); // output "My String with Multiple lines"
文字列の先頭と末尾の空白も自動的に削除されるため、はるかに便利です。正規表現は必要ありません。
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!"
これが目的を果たすことを願っています
置換が使用されていない場合、string = string.split(/\W + /);
これを試して、複数のスペースを単一のスペースに置き換えます。
<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>
続きを読む@ 複数のスペースを単一のスペースに置き換える
より細かく制御するには、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"
var text = `xxx df dfvdfv df
dfv`.split(/[\s,\t,\r,\n]+/).filter(x=>x).join(' ');
結果:
"xxx df dfvdfv df dfv"
このスクリプトは、単語とトリムの間にある空白(複数の空白、タブ、リターンなど)を削除します。
// 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, ' ');
};
var string = "The dog has a long tail, and it is RED!";
var replaced = string.replace(/ +/g, " ");
あるいはタブも置き換えたい場合は:
var replaced = string.replace(/\s+/g, " ");
var myregexp = new RegExp(/ {2,}/g);
str = str.replace(myregexp,' ');