2017-01-26 4 views
1

すべてのスペースを で置き換える方法ですが、最初のスペースは空白ではなく最初のスペースで置き換えます。JavaScript/jQuery: で2番目、3番目などのスペースを置き換えますが、テキストの最初のスペースは置き換えません。

例として、この文字列:あなたが最初のスペースが保存されて見たよう

var str = "hello  how are you doing? " 

"hello     how are you    doing?  " 

に変更する必要があります。

例として、

str.split(' ').join(' ') 

 を持つすべての' 'を置き換えます。

答えて

1
str.replace(/ +/g, function(match) { 
    return " " + Array(match.length).join(' '); 
}); 

これにより、第2のパラメータとしての置換を生成する機能を取り、 の適切な数続く単一スペースで2つの以上のスペースのすべての発生を置き換えreplaceのバージョンを使用します。

String.prototype.repeat機能がありますが、これはIEではサポートされていませんので、今のところ のシーケンスを生成する別の方法を使用することをお勧めします。 Array(match.length).join(' ')は、別の質問にthis answerから取った文字列を繰り返すための短い方法です。あなたがの長さから1を減算する必要はありませんArray(n).join

function repeat(pattern, count) { 
    if (count < 1) return ''; 
    var result = ''; 
    while (count > 1) { 
     if (count & 1) result += pattern; 
     count >>= 1, pattern += pattern; 
    } 
    return result + pattern; 
} 

お知らせ:再びRepeat String質問から取られますが、繰り返しを実行するには、この機能を使用することができます別の方法として

、一致して、壊れていないスペースを適切に取得します。例えばArray(3).join('&nbsp;')"&nbsp;&nbsp;"ですが、繰り返しストリングを生成する他の方法では、マッチの長さよりも1分短くする必要があります。

2

この関数はそれを

function myFunction() { 
      var str = "hello  how are you doing? "; 
      var patt1 = /\s{2,}/g; 
      var result = str.replace(patt1,function(filtered){ 
       return " " + Array(filtered.length).join('&nbsp;') 
      })); 
      document.getElementById("demo").innerHTML = result; 
      console.log(result) 
} 

を行いますが、あなたは文句を言わない私が を文書化するために書いていますので、いずれかが影響を与える見ていますが、コンソールに書き込む場合は、間違いなく影響を与える

編集-1が表示されます 私のコードでミスを指摘したmikejのおかげで、私の小さなスニペットは実際には彼と同じです。彼の答えは、より正確であり、ここで提供されるよりも多くの情報を持っている、

answer By mikej

+0

2つ以上のスペースを空白で置き換え、それに続く「 」と置き換えるのではなく、最初のスペース*をすべて置き換えるのではなく、「 」としますか? – mikej

+1

はい、それは気づかなかった:(その場合私はそれを編集する必要があります。) –

+0

の場合は、頭のおかげであなたのクレジットをあなたと少し同じコードで行くよ、私は希望あなたは気にしない –

1

あなたが基本的な取得したい場合は、あなたがthis answerに触発され、以下のようなものを、試すことができ、かつATES Goralによってコメント(別のユーティリティ機能基本文字列クラスを拡張するのではなく)。すべてのブラウザで動作するはずです:

var str = "some words here"; 
var first = true; 
for (var i=0; i<str.length; i++) { 
    if (str[i] == " " && !first) { 
    str = fix(str, i, '\u00A0'); //insert unicode for &nbsp; 
    } else if (str[i] == " " && first) { 
    first = false; 
    } else if (str[i] != " ") { 
    first = true; 
    } 
} 

function fix(s, index, character) { 
    return s.substr(0, index) + character + s.substr(index+character.length); 
} 

文字列は不変であるので、あなたは全体(修正)の文字列に変更を加えるたびに返し、str変数に入れなければなりません。

関連する問題