0

私はこのようなことをしようとしています...

f = f.replace('   ','   ','gi');

私もこれを試しました...

f = f.replace(/\ {3,}/g,'   ','gi');

3 つのスペースを上記のエンティティに置き換えるにはどうすればよいですか?

使用\sしても機能しません。スタックに関する他の多くの Q&A を試しましたが、何も機能しませんでした。

明確にするために、この問題はシリアル化に加えて解析に起因しXMLSerializer()、スペースは各文の先頭にあります。これを使用して、編集時にコードを人間が読めるようにします。

XHTML エディターでのプレースホルダー テキストの例 (テキストエリアのみ)...

 <p>1
 &#160; 2
 &#160; 3
 &#160; 4
 &#160; 5</p>

...目標は、このコードをシリアル化し、エンティティを保持するか (シリアル化は解析すべきではありませんが、すべてのブラウザーは解析します)、後遺症を置き換えて「解析解除」することです。

また、変数 f は文字列であり、例のオブジェクトやフラグメントではありません。

重要!

encodeURI を使用した後、これらは によって生成されたスペースではないことが判明しXMLSerializer()ました (これを読みやすくするためにスペースが追加されました) %0A %20 %C2 %A0 %C2 %A0


これは、encodeURI を使用して文字が何であるかを判断する前と後で、テキストがどのように見えるかの例をいくつか示しています。

%0A%20&#160;&#160;First%20and

&#160;&#160;First and

最初のものには 2 つのエンティティが挿入されていますが、望ましくありません。必要なのは 1 つだけです。

&#160; Which is actually

%0A%20&#160;%20Which%20is%20actually

2 番目の出力は、@Bergi の以下を使用してうまく機能します...

f = f.replace(/\u00a0/g, '&#160;')

以下は失敗した試行で、最後の試行が成功した試行です...

//f = f.replace(/^\s+|\s+$/g,'');
//f = f.replace('   ',' &#160; ','gi');
//f = f.replace( / {3,}/g, '&#160;' );
//f = f.replace(/ {3,}/g,' \u00a0 ');
//f = f.replace(/\ {3,}/g,' &#160; ');
f = f.replace(/ \u00a0/g, ' &#160;');
4

3 に答える 3

2
var f = "Hello      World";
f = f.replace( / {3,}/g, '&#160;' );
console.log(f);
// "Hello&#160;World"

あなたの問題は文字列の置換とは何の関係もないようなにおいがしますが、それを使用して HTML を変更する方法です。そのために何をしていますか?

編集:ユーザーがブラウザで実際に たい場合は&#160;、次のものが必要です。

f = f.replace( /\s+{3,}/g, '&amp;#160;' );

デモ: http://jsfiddle.net/wrMMy/

于 2012-07-27T19:57:44.297 に答える
1

エンティティに置き換える代わりに、実際のキャラクターに置き換えます。

 f = f.replace(/ {3,}/g,' \u00a0 ');

もちろん、それはその文字列の出力に依存しますが、通常は文字列をそのまま使用する必要があります。

white-space:pre-wrapところで:html / xmlの空白を読みやすくするには、改行しない文字を挿入するのではなく、cssプロパティをお勧めします。彼らは特にテキストをコピーすることを恐ろしいものにします。また、ソースと同じ数の空白を表示したい場合は、に置き換える必要があり/\s{2}/ます" \u00a0"


OK、非常に興味深い入力があります。改行(、、10%0A"\n"通常のスペース(32、、 ) %20" "および2つの非改行スペース(、、160%C2%A0です"\u00a0"。目的の出力を取得するために今できること:

  • 最初のnbspをそのエンティティに置き換え、2番目を空白に置き換えます。replace(/\u00a0{2}/g, "&#160; ")
  • 2つの隣接するnbspの最初のnbspのみを置き換えます。replace(/\u00a0(.)/g, "&#160;$1")
  • 3つの空白を2つの空白と、次の間のエンティティに置き換えます。replace(/\s{3}/g, " &#160; ")
于 2012-07-27T20:04:19.357 に答える
1
f = f.replace(/\ {3,}/g,' &#160; ');

それはうまくいきます。 replace引数は2つだけです。
デモ: http: //jsfiddle.net/SjydF/

于 2012-07-27T20:00:49.180 に答える