2013-01-10 22 views
23

Szukałem tego przez chwilę i chociaż znalazłem wiele odpowiedzi na zmianę spacji w myślnik (myślnik), nie znalazłem żadnego inny kierunek.javascript - zastępuje myślnik (myślnik) spacją

Początkowo mam:

var str = "This-is-a-news-item-"; 

staram się zastąpić go:

str.replace("-", ' '); 

i po prostu wyświetlić wynik:

alert(str); 

Teraz nie robi cokolwiek, więc nie jestem pewien, gdzie się zwrócić. Próbowałem cofnąć niektóre z istniejących, które zastępują przestrzeń myślnikiem, i to też nie działa.

Dzięki za pomoc.

+4

Łańcuch nie jest zmienny, musisz ponownie przypisać wynik. –

Odpowiedz

69

To rozwiązuje go:

var str = "This-is-a-news-item-"; 
str = str.replace(/-/g, ' '); 
alert(str); 

istniały dwa problemy z kodem:

  1. pierwszy, String.replace() nie zmienia sam ciąg, to powraca się zmieniono ciąg.
  2. Po drugie, jeśli przekażesz ciąg znaków do funkcji replace, zastąpi tylko pierwszą napotkaną instancję. Właśnie dlatego przekazałem regular expression z flagą g dla "globalnej", aby wszystkie wystąpienia zostały zastąpione.
+0

Demo tutaj: http://jsfiddle.net/vor0nwe/3EuZb/1/ – Martijn

+0

Bingo, to było to! Dzięki wielkie! – CMIVXX

4

Myślę, że problemem stoją prawie w tym: -

str = str.replace("-", ' '); 

Trzeba ponownie przypisać wynik zamiennik do str, aby zobaczyć odzwierciedlenie zmian.

Od MSDN Javascript reference: -

Wynikiem metody zastąpienia jest kopią stringObj po określone wymiany zostały dokonane.

zastąpić wszystkie -, trzeba by użyć /g modyfikator z parametrem regex: -

str = str.replace(/-/g, ' '); 
+0

To zastąpi tylko pierwsze wystąpienie ... Aby zmienić wszystkie instancje, musisz użyć "globalnego" wyrażenia regularnego. – Martijn

+0

@Martijn .. Tak, wskazywałem na poważny problem. OP dowiedziałby się o tym również po uruchomieniu tego. Wciąż dla twojej satysfakcji, wysłałem bezpośrednią odpowiedź. –

+0

Przepraszam, ale teraz to nie działa: wciąż przekazujesz ciąg znaków, który zawiera wyrażenie _pattern dla_ wyrażenie regularne. Porzuć podwójne cytaty i jesteś dobry. – Martijn

3

replace() zwraca nowy ciąg znaków, a oryginalny ciąg nie jest modyfikowany. Trzeba zrobić

str = str.replace(/-/g, ' '); 
+0

To nie działa z jakiegokolwiek powodu ... [Zobacz link Fiddle] (http://jsfiddle.net/cmivxx/3EuZb/) – CMIVXX

+0

Jak zauważono w innych odpowiedziach, działa to tylko dla pierwszego instancja. Powinieneś użyć 'str = str.replace (/ -/g, '');' aby zamienić wszystkie wystąpienia myślnika. – iagreen

0
var str = "This-is-a-news-item-"; 
while (str.contains("-")) { 
    str = str.replace("-", ' '); 
} 
alert(str); 

Okazało się, że jeden wykorzystanie str.replace() zastąpi tylko pierwszy myślnik, więc zapętlony thru gdy ciąg wejściowy zawiera jeszcze żadnych myślników i zastąpić je wszystkie.

http://jsfiddle.net/LGCYF/

0

Oprócz odpowiedzi już udzielonych prawdopodobnie chcesz zastąpić wszystkie wystąpienia. Aby to zrobić, będziesz potrzebować wyrażenia regularnego w następujący sposób:

str = str.replace(/-/g, ' '); // Replace all '-' with ' ' 
Powiązane problemy