Zastąpienie spacji podkreśleniami w JavaScript?


352

Próbuję użyć tego kodu do zamiany spacji na _, działa dla pierwszej spacji w ciągu, ale wszystkie pozostałe wystąpienia spacji pozostają niezmienione. Czy ktoś wie dlaczego?

function updateKey()
{
    var key=$("#title").val();
    key=key.replace(" ","_");
    $("#url_key").val(key);
}

Odpowiedzi:


693

Próbować .replace(/ /g,"_");

Edycja : lub .split(' ').join('_')jeśli masz awersję do RE

Edycja : John Resig powiedział :

Jeśli szukasz i zamieniasz ciąg za pomocą wyszukiwania statycznego i zamiany statycznej, szybciej jest wykonać akcję z .split („dopasuj”). Join („replace”) - co wydaje się sprzeczne z intuicją, ale udaje się w ten sposób w większości nowoczesnych przeglądarek. (Wprowadzane są zmiany, które znacznie poprawią wydajność .replace (/ match / g, „replace”) w następnej wersji Firefoksa - więc poprzednie oświadczenie nie będzie miało miejsca na długo).


1
Czy można to zrobić bez wyrażenia regularnego?
Kliknij Upvote

14
.split ('') .join ('_')
Crescent Fresh

7
Zamiast / /gużycia /\ /g- oba działają w JavaScript. Ten ostatni działa również w CoffeeScript.
Tom Leys,

27
Na 2015 rok jest .replace(/ /g,"_");szybszy niż .split(' ').join('_').
Gabriel Tomitsuka

8
Przyszli ludzie przeglądający ten @Inez mają link do przetestowania obu prędkości podziału / dołączenia VS. zastąpić. Pod koniec 2018 r. Wymiana jest znacznie szybsza.
ricks


58

Aby odpowiedzieć na pytanie Prasanny poniżej:

Jak zastąpić wiele spacji pojedynczą spacją w JavaScript?

Użyłbyś tej samej funkcji replacez innym wyrażeniem regularnym. Wyrażeniem spacji jest, \sa wyrażenie „1 lub więcej razy” jest +znakiem plus, więc wystarczy zastąpić odpowiedź Adama następującą:

key=key.replace(/\s+/g,"_");

30

Możesz tego spróbować

 var str = 'hello     world  !!';
 str = str.replace(/\s+/g, '-');

Zastąpi nawet wiele spacji pojedynczym „-”.


3
Prawdopodobnie warte uwagi: powoduje to również usunięcie zakładek z innymi spacjami.
Berry M.,

18

Stworzyłem dla niego test wydajności JS http://jsperf.com/split-and-join-vs-replace2


1
wydaje się, że obecnie zastąpienie jest lepszym ogólnym wyborem
Houman

Kave - co? Chociaż nie wszystkie przeglądarki są równe, dzielenie / łączenie jest średnio znacznie lepsze. W rzeczywistości w wielu nowoczesnych przeglądarkach jest o wiele lepiej! Dzięki Inez za skonfigurowanie tego!
David Hobs

4
Nieco ponad rok później uruchomienie powyższego testu w przeglądarce Chrome 32.0.1700.107 .. str .replace () daje znacznie lepsze wyniki (64% szybciej)
jenovachild

12

Zastąp spacje znakiem podkreślenia

var str = 'How are you';
var replaced = str.split(' ').join('_');

Wyjście: How_are_you


3

Wiem, że to jest stare, ale nie widziałem, żeby ktoś wspominał o przedłużeniu Łańcucha prototype.

String.prototype.replaceAll = function(search, replace){
    if(!search || !replace){return this;} //if search entry or replace entry empty return the string
    return this.replace(new RegExp('[' + search + ']', 'g'), replace); //global RegEx search for all instances ("g") of your search entry and replace them all.
};

1
Nie widziałeś, żeby ktoś to robił, ponieważ to okropny pomysł. Sprawdź to inne pytanie SO, aby uzyskać więcej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.