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?

MNIE
źródło

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.

CMS
źródło
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
yurin
źródło
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
Eesa
źródło
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.).

Matias
źródło
0

var str = "Tatwerat Development Team";
str = str.replace(/\s+/g, '-');
console.log(str);
console.log(str.toLowerCase())

Abdo-Host
źródło