2012-01-26 4 views
12

Как удалить вкладку из любой строки в 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' 

почему?

+0

возможно дубликат [заменить все вхождения в строку] (http://stackoverflow.com/questions/6064956/replace-all-occurrences- in-a-string) –

+0

То, что вы получаете массив символов, кажется маловероятным (я не могу воспроизвести его), но это может быть связано с тем, что вы используете конструктор 'String()', который не нужен. Просто сделайте 'content.replace (...)'. –

+0

Вы собираетесь 'eval' эту строку? –

ответ

18

Проблема, вероятно, в том, как вы определяете content.

Если content=='\t session',

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

означает, что content==' session'.

На боковой ноте String(...) не требуется.

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

достигает такого же результата.

Edit:

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 Алекс К. предложил:

var content = data.toString().replace(/\t/g, '').split('\r\n'); 
+0

Деннис, дело в том, что я получаю контент в виде буфера, превращая его в строку toString(); поэтому я должен сделать это с помощью конструктора строк ... любая другая идея, как с этим справиться? – Itzik984

+0

Не могли бы вы показать нам код, определяющий 'content'? – Dennis

+0

да плохо отредактировал его – Itzik984

20

Для замены всех вхождений требуется регулярное выражение;

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

(г является глобальный флаг)

/^\t+/ ограничивает для замены ведущих только вкладки, /^\s+/ включает в себя любые ведущие пробелы, который является то, что вам потребуется для "\t\t var" -> "var"

Update

Вы не сказали, как принимается буфер & какой тип это, мое самое близкое предположение, хотя его странная вещь получать;

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" 
+0

Alex, я получаю контент в виде буфера, превращая его в строку с помощью toString(); поэтому я должен сделать это с помощью конструктора строк ... любая другая идея, как с этим справиться? – Itzik984

+0

Что такое «буфер»? И как только вы используете 'toString', у вас есть строка, поэтому все равно не нужно использовать такой конструктор. –

+0

Вы должны уметь «var str = content.toString(). Replace (...);' Ваш пример '' s ',' e ',' s ',' s ',' i ',' o ',' n'' является результатом отображения объекта Array, который по умолчанию не поддерживает '.replace' .. if' toString() 'fail что-то переопределяет/переопределяет некоторые методы, и вам нужно будет предоставить более подробную информацию о 'content' –

Смежные вопросы