web-dev-qa-db-ja.com

文字列javascriptからタブ( '\ t')を削除します

Javascriptの文字列からタブを削除するにはどうすればよいですか?

文字列を取得すると、次のようなバッファになります。

<Buffer 0d 0a 3c 25 72 65 73 70 6f 6e 73 65 2e 73 74 61 74 75 73 20...>

 function translate(data) {

  var content = data.toString().split('\r\n');

  }

そして、私は次を実行します...

たとえば、次の行があります。

 '\t\t var session = request.getSession();'
 '\t\t session["user"] = {};'

そして、私はそれが欲しいです:

'var session = request.getSession();'
'session["user"] = {};'

ところで、私がするとき:

content=String(content).replace('\t','');

これが、String(...)コンストラクターが必要な理由です。

私がそれを使用しない場合、オブジェクトを取得する病気はメソッドを置き換えません。

内容が解析したい文字列であると仮定すると、これは次のことを意味する文字で解析します:

'\t session'

これになります:

's','e','s','s','i','o','n'

どうして?

21
Itzik984

問題はおそらくcontentの定義方法にあります。

_content=='\t session'_の場合、

_`content=String(content).replace('\t','');`
_

_content==' session'_を意味します。

補足として、String(...)は不要です。

_`content=content.replace('\t','');`
_

同じ結果を達成します。

編集:

String(array)は期待どおりに機能しません。

文字列を分割する前に置換を実行するか、配列のすべての要素に対して個別に置換を実行する必要があります。

の代わりに

_var content = data.toString().split('\r\n');
content=String(content).replace('\t','');
_

試してみる

_var content = data.toString().replace('\t', '').split('\r\n');
_

replace('\t', '')は_\t_の最初の出現のみを置換することに注意してください。グローバル置換を行うには、提案されたRegExp Alex Kを使用します。

_var content = data.toString().replace(/\t/g, '').split('\r\n');
_
25
Dennis

すべての出現を置き換える正規表現が必要です。

content = content.replace(/\t/g, '');

(gはグローバルフラグです)

/^\t+/は、leadingタブのみの置換に制限されます。/^\s+/には、"\t\t var" -> "var"に必要な先頭の空白が含まれます。

更新

バッファがどのように受信されるのか、どのタイプであるのかについてはまだ説明していません。

var test_buffer_array = "\x0d \x0a \x3c \x25 \x72 \x65 \x73 \x70 \x6f \x6e \x73 \x65 \x2e \x73 \x74 \x61 \x74 \x75 \x73 \x20".split(" ")

translate(test_buffer_array);

function translate(data) {
    var content = data.join("").replace(/^\t+/gm, '');
    print(content);
}

result: "<%response.status"
23
Alex K.