2012-01-26 18 views
12

Jak usunąć kartę z dowolnego ciągu znaków w javascript?Usuń zakładkę (' t') z ciągu znaków javascript

kiedy dostanę moje ciąg chodzi jako bufor jak ten:

<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'); 

    } 

a potem wykonać następującą ...

na przykład, mam te linie:

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

i chcę tylko, aby było:

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

przy okazji, kiedy zrobić:

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

dlatego muszę String (...) Konstruktor.

jeśli nie będę go używał, źle, obiekt nie ma metody zamiany.

zakładając treść jest ciąg chcę analizować analizuje go pismem rozumieniu to:

'\t session' 

staje się w ten sposób:

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

dlaczego?

+0

możliwe duplikat [zastąpić wszystkie wystąpienia w ciągu znaków] (http://stackoverflow.com/questions/6064956/replace-all-occurrences- in-a-string) –

+0

To, że dostajesz tablicę znaków, wydaje się mało prawdopodobne (nie mogę tego odtworzyć), ale może być związane z faktem, że używasz konstruktora 'String()', który jest niepotrzebny. Po prostu wykonaj 'content.replace (...)'. –

+0

Czy zamierzasz "eval" tego łańcucha? –

Odpowiedz

18

Problem polega prawdopodobnie na definiowaniu content.

Jeśli content=='\t session',

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

oznacza, że ​​content==' session'.

Na marginesie, String(...) jest niepotrzebny.

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

osiąga taki sam wynik.

Edit:

String(array) nie działa zgodnie z oczekiwaniami.

Musisz dokonać wymiany przed rozdzieleniem łańcucha lub wykonać zamianę na każdym elemencie macierzy oddzielnie.

Zamiast

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

spróbować

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

Zauważ, że replace('\t', '') zastąpi tylko pierwsze wystąpienie \t. Aby to zrobić globalną wymienić należy użyć RegExp Alex K. zaproponował:

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

dennis, chodzi o to, że otrzymuję zawartość jako bufor, zamieniając ją na ciąg znaków przez toString(); więc muszę to zrobić z konstruktorem ciągów ... jakikolwiek inny pomysł jak sobie z tym poradzić? – Itzik984

+0

Czy możesz pokazać nam kod, który definiuje 'treść'? – Dennis

+0

tak źle edytuj to – Itzik984

20

Potrzebujesz regexp, aby zastąpić wszystkie wystąpienia;

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

(g jest globalna flaga)

/^\t+/ ogranicza się do zastąpienia prowadząc tylko wypustki, /^\s+/ obejmuje wszelkie wiodącą spacji, która jest, co jest potrzebne do "\t\t var" -> "var"

Aktualizacja

Nie powiedziałeś, jak odbierany jest bufor & co to za typ, moje najbliższe przypuszczenie, chociaż jest to dziwna rzecz do odbioru;

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, chodzi o to, że otrzymuję zawartość jako bufor, zamieniając ją na ciąg znaków przez toString(); więc muszę to zrobić z konstruktorem ciągów ... jakikolwiek inny pomysł jak sobie z tym poradzić? – Itzik984

+0

Co to jest "bufor"? A kiedy już użyjesz 'toString', masz ciąg znaków, więc nadal nie musisz używać takiego konstruktora. –

+0

Powinieneś być w stanie 'var str = content.toString(). Replace (...);' Twój przykład '' s ',' e ',' s ',' s ',' i ',' o ',' n'' jest wynikiem wyświetlania obiektu Array, który domyślnie nie obsługuje '.replace' .. jeśli' toString() 'zawiedzie, coś nadpisuje/reimplementuje niektóre metody i będziesz potrzebować dostarczyć więcej szczegółów 'treść' –

Powiązane problemy