次のような文字列が与えられたとします。
「犬はしっぽが長くて、赤い!」
スペースを最大1つのスペースに保つために、どのようなjQueryまたはJavaScriptマジックを使用できますか?
ゴール:
「犬はしっぽが長くて、赤い!」
str.replace(/ +(?= )/g,'');
です。必要のないものは置き換えません。
次のような文字列が与えられたとします。
「犬はしっぽが長くて、赤い!」
スペースを最大1つのスペースに保つために、どのようなjQueryまたはJavaScriptマジックを使用できますか?
ゴール:
「犬はしっぽが長くて、赤い!」
str.replace(/ +(?= )/g,'');
です。必要のないものは置き換えません。
回答:
あなたもカバータブ、改行などにしたいことを考えると、単に置き換える\s\s+
と' '
:
string = string.replace(/\s\s+/g, ' ');
スペースのみをカバーしたい(したがって、タブや改行などをカバーしない)場合は、次のようにします。
string = string.replace(/ +/g, ' ');
function removeExtraSpaces(string){ return string.replace(/\s{2,}/g, ' ');}
trim()
。正規表現よりも高速です。あなたは何ができますstring.trim().replace(/\s\s+/g, ' ');
かstring.replace(/\s\s+/g, ' ').trim();
。
/\s\s+/g
そして/\s{2,}/g
、少なくとも2つが隣接している場合を除き、空白文字とは一致しません。たとえば、\ t \ tとは一致しますが、単一の\ tとは一致しません。string.replace(/\s+/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で、100k文字列置換を実行しています。
パフォーマンスに問題があると思われる場合は、firebugを使用して独自のプロファイリングテストを行うことをお勧めします。人間は、プログラムのボトルネックがどこにあるかを予測することで悪名高い。
(また、IE 8の開発者ツールバーにもプロファイラーが組み込まれていることに注意してください-IEのパフォーマンスを確認する価値があるかもしれません。)
( / +(?= )/g, ' ');
IE9では失敗し、二重スペースが"Foo Bar Baz".replace(/ +(?= )/g, ' ');
"Foo Bar Baz"
var str = "The dog has a long tail, and it is RED!";
str = str.replace(/ {2,}/g,' ');
編集: すべての種類の空白文字を置き換えたい場合、最も効率的な方法は次のようになります:
str = str.replace(/\s{2,}/g,' ');
これは1つの解決策ですが、すべてのスペース文字をターゲットにします。
"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 !"
あなたの例にはそれらのスペースはありませんでしたが、それらも非常に一般的なシナリオであり、受け入れられた答えは、「The ... RED!」のように、それらを単一のスペースにトリミングすることだけでした。これは通常必要なものではありません。
初心者向けの包括的な暗号化されていない回答。
これは、私のような、動作しない一部の人が作成したスクリプトをテストするすべてのダミーのためのものです。
次の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スペースのみを許可します//末尾の.replace(/ \ s \ s + / g、 "")は余分なスペースを削除します// I一重引用符を使用すると、機能しませんでした。
function NoDoublesPls3()
{ var str=document.getElementById("NoDoubles3");
var regex=/[^a-z 0-9]/gi;
str.value=str.value.replace(regex ,"") .replace(/\s\s+/g, " ");
}
::次::
#3を保存しますa .js
//私はNoDoubles.jsを呼び出しました
::次:: ページに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"/>
これにより、特殊文字が削除され、単一のスペースが許可され、余分なスペースが削除されます。
var string = "The dog has a long tail, and it is RED!";
var replaced = string.replace(/ +/g, " ");
または、タブも置き換えたい場合:
var replaced = string.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コマンドを使用して説明された次の正規表現を使用できます。同様の正規表現は、他の言語やプラットフォームでも使用できます。
テキストをいくつかのファイルに追加して、テストを言います
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!"
これが目的に役立つことを願って
複数のスペースを1つのスペースに置き換えるには、これを試してください。
<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>
続きを読む@ 複数のスペースを1つのスペースに置き換える
このスクリプトは、単語とトリムの間の空白(複数のスペース、タブ、改行など)を削除します。
// 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, ' ');
};
正規表現を使用する必要があることはわかっていますが、インタビュー中に、正規表現を使用せずに実行するように求められました。
@slightlytylerは、以下のアプローチを考え出すのに役立ちました。
const testStr = "I LOVE STACKOVERFLOW LOL";
const removeSpaces = str => {
const chars = str.split('');
const nextChars = chars.reduce(
(acc, c) => {
if (c === ' ') {
const lastChar = acc[acc.length - 1];
if (lastChar === ' ') {
return acc;
}
}
return [...acc, c];
},
[],
);
const nextStr = nextChars.join('');
return nextStr
};
console.log(removeSpaces(testStr));