Zamień spacje na myślniki i wszystkie małe litery powinny być małe


247

Muszę ponownie sformatować ciąg przy użyciu jQuery lub waniliowego JavaScript

Powiedzmy, że mamy "Sonic Free Games".

Chcę to przekonwertować "sonic-free-games".

Dlatego białe znaki należy zastąpić myślnikami, a wszystkie litery zamieniać na małe litery.

Proszę o pomoc w tej sprawie?

Odpowiedzi:


549

Wystarczy użyć ciągu znaków replacei toLowerCasemetod, na przykład:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase();
console.log(str); // "sonic-free-games"

Zwróć uwagę na gflagę na RegExp, spowoduje to zastąpienie globalnie w ciągu, jeśli nie zostanie użyte, tylko pierwsze wystąpienie zostanie zastąpione, a także, które RegExpbędą pasować do jednego lub więcej białych znaków.


52
Odmiana, którą wymyśliłem, używa \ W, która reprezentuje dowolny znak niealfanumeryczny. Jest to przydatne w przypadku czegoś takiego jak „A&P Grocery”, który stałby się „ap-grocery”. str.replace(/\W+/g, '-').toLowerCase();
Adam Waselnuk,

1
Nie cytuj części wyrażenia regularnego, tzn. replace(/\s+/g, ..I nie replace('/\s+/f', .. (bez apostrofów)
Attila Fulop

Co jeśli chcę usunąć spacje na początku i na końcu łańcucha?
Romel Indemne

@RomelIndemne Obecnie możesz skorzystać z String.prototype.trimmetody:str.trim().replace(/\s+/g, '-').toLowerCase()
CMS

Dzięki, miło. Teraz potrzebuję
odwrotu

34

Powyższa odpowiedź może być nieco myląca. Metody łańcuchowe nie modyfikują oryginalnego obiektu. Oni powrócić nowego obiektu. To musi być:

var str = "Sonic Free Games";
str = str.replace(/\s+/g, '-').toLowerCase(); //new object assigned to var str

10
Myślę, że należy zauważyć, że przyjęta odpowiedź została zredagowana w celu uwzględnienia tej koncepcji
Dexygen

31

Możesz także użyć spliti join:

"Sonic Free Games".split(" ").join("-").toLowerCase(); //sonic-free-games

Należy pamiętać o przypadkach pobocznych, na przykład gdy na początku jest trochę miejsca, nie zostaną one zastąpione
Bonjour123

1

Odpowiedź @ CMS jest w porządku, ale chcę zauważyć, że możesz użyć tego pakietu: https://github.com/sindresorhus/slugify , który robi to za Ciebie i obejmuje wiele przypadków krawędzi (tj. Niemieckie umlauty, wietnamski, arabski , Rosyjski, rumuński, turecki itp.).


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.